설탕 배달 성공 풀이
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 34217 | 7949 | 6596 | 26.016% |
문제
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)
출력
상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.
예제 입력
18
예제 출력
4
[소스코드]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import java.util.*; class Main { public static void main(String[] args) { Scanner sca = new Scanner(System.in); int n = sca.nextInt(); int k = n; int c3 = 0; int c5 = 0; int end =0; while(end == 0){ for(int i = 0; i<n/5; i++){ //(1) if(k>=5){ k=k-5; c5++; } } for(int i = 0; i<k; i++){ //(2) if(k>=3){ k=k-3; c3++; } } while(end==0){ switch(k){ case 2: case 1: if(c5==0 && k!=0){ System.out.println(-1); end = 1; } c5--; k+=5; for(int i = 0; i<k; i++){ if(k>=3){ k=k-3; c3++; } } break; case 0: end = 1; System.out.println(c5+c3); break; } } } } } | cs |
[풀이]
-입력을 받으면 최대한 적은 봉지를 갖기 위해 5kg으로 먼저 나눠보는 순서로 이루어진다.
5kg으로 나눈후 -> 3kg으로 나누고 나머지가 있는경우 5kg봉지 하나를 나머지와 더해 3kg으로 나눠지는지 반복적으로 계산한다
마지막 까지 나머지가 존재하는경우 -1을 출력하고/ 나누어 떨어지는 경우를 발견하면 그에 해당하는 봉지수를 더하여 출력한다.
- 입력이 16인경우
순서 |
5kg 수 |
3kg 수 |
나머지 |
합 |
1 | 3 (1) | 0 (2) | 1 | 나머지 존재 불가 |
2 |
2 |
2 |
0 |
4 |
순서 |
5kg 수 |
3kg 수 |
나머지 |
합 |
1 | 3 | 1 | 1 | 나머지존재 불가 |
2 |
2 |
3 |
0 |
5 |
1. 종료조건이 0인동안 반복하는 큰 while문 안에 5kg으로 가능한 많이 나누어 표(1)의 갯수를 구한다 ->첫번째 for문으로 주석참고
2. 5kg으로 나눈후 남은 값을 가지고 3kg으로 가능한 많이 나누어 표(2)의 갯수를 구한다 -> 두번째 for문으로 주석참고
3. 나머지가 존재하는 경우 표 두번째 행부터 값이 구해지는 행까지 5kg수에서 -1을 하고 나머지와 더하여 3kg으로 나누어 떨어지는 값을 찾는 과정을 반복
(switch문을 이용하여 나머지가 0이 아니고 5kg의 수가 0이 아닌동안 5kg 수 -1을 하고 나머지 값 k 에 +5를 하여 다시 나머지(k-3) & 3kg수 +1 를 하여 나머지 검사를 하는과정을 반복한다. -> 나머지가 0이되면 그 합을 출력하고, 5kg수가 0이 될때 까지 나누어떨어지지 않으면
-1을 출력한다
--설명도 부족하고 코딩도 너무 야매여서 .. 부족함이 많습니다..ㅠㅠ
'백준알고리즘' 카테고리의 다른 글
[3단계 for문 사용해보기]2742번 (0) | 2017.11.28 |
---|---|
[3단계 for문 사용해보기]2741번 (0) | 2017.11.28 |
[2단계 사칙연산 도전하기]2558번 (0) | 2017.11.24 |
[2단계 사칙연산 도전하기]10430번 (0) | 2017.11.23 |
[2단계 사칙연산 도전하기]10998번 (0) | 2017.11.23 |