https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
알고리즘
문제
봉지 개수 최소화
- 최대한 5kg 봉지로 구성해야 함
순서
- 5로 나누어 떨어지는 수
- 5로 나누어 떨어지지 않는 수
- (N / 5) 값과 (N % 5) 값 파악
- 예외 경우 파악
결론
크게 4가지 경우로 나누자
1. N == 4 or N == 7
- 골드바흐의 추측 적용
- 주어진 조건 : 3kg, 5kg
- 주어진 두 소수 3, 5의 합인 8 이상의 모든 자연수는 소수의 합으로 나타낼 수 있음
- ∴ 두 소수의 합 이하의 경우 제외, 모든 수는 3, 5로 소인수분해 가능함
2. N이 5의 배수인 경우(5로 나눈 나머지 == 0)
3. N이 (5의 배수 + 1) or (5의 배수 + 3)인 경우(5로 나눈 나머지 == 1 or 5로 나눈 나머지 == 3)
4. N이 (5의 배수 + 2) or (5의 배수 + 4)인 경우(5로 나눈 나머지 == 2 or 5로 나눈 나머지 == 4)
풀이
1. Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
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);
}
}
}
2. BufferedReader
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
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);
}
}
}
성능
- BufferedReader > Scanner
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1978번 : 소수 찾기 - Java (0) | 2022.03.28 |
---|---|
[백준] 10757번 : 큰 수 A + B - Java (0) | 2022.03.26 |
[백준] 2775번 : 부녀회장이 될테야 - Java (0) | 2022.03.26 |
[백준] 10250번 : ACM 호텔 -Java (0) | 2022.03.24 |
[백준] 2869번 : 달팽이는 올라가고 싶다 - Java (0) | 2022.03.24 |
댓글