반응형
https://www.acmicpc.net/problem/2839
<문제 분석>
재귀나 반복문으로 푸는 문제가 아니다. 따라서 수들을 늘어서놓고 법칙을 찾아야 한다.
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | 2 | ||||||||
N / 5 | 1 | 2 | ||||||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | ||||||
N / 5 | 2 | 3 | |||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
1. 법칙성을 찾기 위해 N/5와 N%5의 값들을 구해본다.
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | 2 | ||||||||
N / 5 | ||||||||||
N % 5 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | ||||||
N / 5 | |||||||
N % 5 |
2. 5kg 봉지로 먼저 나눠야 하는 것이 최상이기에 일단 N/5를 한 봉지의 수를 먼저 구한다.
if (n%5 == 0)
System.out.println(n/5);
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | 1 | 2 | 2 | ||||||
N / 5 | 1 | 2 | ||||||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | 3 | 4 | ||||
N / 5 | 2 | 3 | |||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
3. 5의 배수 + 3도 최선의 값이다. (5의 배수로 구한 봉지수 + 3kg 봉지수)
if (n%5 == 3)
System.out.println(n/5 + 1);
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | 1 | 2 | 2 | 2 | 3 | ||||
N / 5 | 1 | 2 | ||||||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | 3 | 4 | 4 | |||
N / 5 | 2 | 3 | |||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
4. 5의 배수 + 6 (5의 배수로 구한 봉지수 + 3kg x 2봉지)
if (n%5 == 1)
System.out.println(n/5 + 1);
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | 1 | 2 | 2 | 3 | 2 | 3 | |||
N / 5 | 1 | 2 | ||||||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | 4 | 3 | 4 | 4 | 5 | |
N / 5 | 2 | 3 | |||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
5. 5의 배수 + 9 (5의 배수로 구한 봉지수 + 3kg x 3봉지)
if (n%5 == 4)
System.out.println(n/5 + 2);
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | 1 | 2 | 2 | 3 | 2 | 3 | 4 | ||
N / 5 | 1 | 2 | ||||||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | 4 | 3 | 4 | 5 | 4 | 5 |
N / 5 | 2 | 3 | |||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
6. 5의 배수 + 12 (5의 배수로 구한 봉지수 + 3kg x 4봉지)
if (n%5 == 2)
System.out.println(n/5 + 2);
N | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
봉지수 | 1 | -1 | 1 | 2 | -1 | 2 | 3 | 2 | 3 | 4 |
N / 5 | 1 | 2 | ||||||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
N | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
봉지수 | 3 | 4 | 3 | 4 | 5 | 4 | 5 |
N / 5 | 2 | 3 | |||||
N % 5 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |
7. 4와 7은 3kg, 5kg으로 나눠지지 않기 때문에 봉지수가 -1이다.
if (n == 4 || n == 7)
System.out.println(-1);
<코드 구현>
import java.util.*;
/*
[백준] 2839번 - 설탕 배달 (Java)
*/
public class Main {
static int n;
void InputData() {
Scanner in = new Scanner(System.in);
n = in.nextInt();
}
void Solve() {
if (n == 4 || n == 7)
System.out.println(-1);
else if (n%5 == 0)
System.out.println(n/5);
else if (n%5 == 1 || n%5 == 3)
System.out.println(n/5 + 1);
else if (n%5 == 2 || n%5 == 4)
System.out.println(n/5 + 2);
else
System.out.println(-1);
}
public static void main(String[] args) {
Main m = new Main();
m.InputData();
m.Solve();
}
}
<제출 결과>
<후기>
간단해 보인 문제였지만 풀어보니 머리로만 풀기는 어려웠던 문제였다. 수를 구하는 문제는 예시를 직접 써보는 것이 얼마나 중요한지 느끼게 되었다. 앞으로도 이런 유형의 문제는 주어진 범위만큼 수를 모두 써본다음 규칙성을 찾는 것이 관건일 것 같다.
반응형
'알고리즘 PS > 백준 알고리즘' 카테고리의 다른 글
[백준] 1541번 - 잃어버린 괄호 (Java) (0) | 2022.09.19 |
---|---|
[백준] 1753번 - 최단경로 (Java) (0) | 2022.09.14 |
[백준] 1707번 - 이분 그래프 (Java) (0) | 2022.09.13 |
[백준] 7562번 - 나이트의 이동 (Java) (0) | 2022.09.13 |
[백준] 1697번 - 숨바꼭질 (Java) (0) | 2022.09.08 |
댓글