|
| 1 | +package practice; |
| 2 | + |
| 3 | +public class Delivery { |
| 4 | + /* |
| 5 | + 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. |
| 6 | + 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. |
| 7 | + 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. |
| 8 | + 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. |
| 9 | + 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. |
| 10 | + 예를 들어, 18킬로그램 설탕을 배달해야 할 때, |
| 11 | + 3킬로그램 봉지 6개를 가져가도 되지만, |
| 12 | + 5킬로그램 3개와 3킬로그램 1개를 배달하면, |
| 13 | + 더 적은 개수의 봉지를 배달할 수 있다. |
| 14 | + 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, |
| 15 | + 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. |
| 16 | + |
| 17 | + 입력 |
| 18 | + 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) |
| 19 | + |
| 20 | + 출력 |
| 21 | + 상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다. |
| 22 | + |
| 23 | + [출처: https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=319719447] |
| 24 | + */ |
| 25 | + |
| 26 | + public int[] calcPackageBack(int weight_sugar) { |
| 27 | + if( !(3 <= weight_sugar && weight_sugar <= 5000) ) { |
| 28 | + System.out.println("상근이가 한 번에 배달하는 설탕의 양은 3kg 이상 및 5000kg 이하입니다."); |
| 29 | + return null; |
| 30 | + } |
| 31 | + for(int i=1; ; i++) { |
| 32 | + int x = weight_sugar - 5*i; // 5kg 봉지로 담고 남은 설탕 |
| 33 | + if(x < 0) { |
| 34 | + if(weight_sugar != 4 && weight_sugar != 7) i--; // 4kg와 7kg의 경우는 따로 처리한다 |
| 35 | + for(; ;i--) { |
| 36 | + int y = weight_sugar - 5*i; |
| 37 | + int[] arr = new int[2]; |
| 38 | + if(y == 0) { |
| 39 | + // 5kg 봉지만으로 설탕을 담을 수 있을 때 |
| 40 | + arr[0] = i; |
| 41 | + arr[1] = 0; |
| 42 | + return arr; |
| 43 | + }else if(y > 0){ |
| 44 | + // 3kg 봉지를 써야할 때 |
| 45 | + if(y % 3 == 0) { |
| 46 | + // 3kg 봉지만으로 남은 설탕을 담을 수 있을 때 |
| 47 | + arr[0] = i; |
| 48 | + arr[1] = y / 3; |
| 49 | + return arr; |
| 50 | + }else if(y % 3 > 0){ |
| 51 | + // 3kg 봉지로 남은 설탕을 담을 수 있을 때까지 루프한다 |
| 52 | + continue; |
| 53 | + }else { |
| 54 | + // 설탕을 완전히 담을 수 없을 때 |
| 55 | + arr[0] = -1; |
| 56 | + arr[1] = -1; |
| 57 | + return arr; |
| 58 | + } |
| 59 | + }else { |
| 60 | + if(weight_sugar == 3) { |
| 61 | + // 설탕의 양이 3kg일 때 |
| 62 | + arr[0] = 0; |
| 63 | + arr[1] = 1; |
| 64 | + return arr; |
| 65 | + }else { |
| 66 | + // 설탕의 양이 4kg 또는 7kg일 때 |
| 67 | + arr[0] = -1; |
| 68 | + arr[1] = -1; |
| 69 | + return arr; |
| 70 | + } |
| 71 | + } |
| 72 | + } |
| 73 | + }else { |
| 74 | + continue; |
| 75 | + } |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | + public static void main(String[] args) { |
| 80 | + Delivery deli = new Delivery(); |
| 81 | + for(int i=3; i <= 1523; i++) { |
| 82 | + System.out.println("설탕 "+i+"kg"); |
| 83 | + for (int val : deli.calcPackageBack(i)) { |
| 84 | + System.out.println(val+"개"); |
| 85 | + } |
| 86 | + System.out.println(); |
| 87 | + } |
| 88 | + } |
| 89 | + |
| 90 | +} |
0 commit comments