반응형
이 문제를 맞닥뜨리면 가장 먼저 하는 착각이 있다. 본인은 봉지의 최소 개수만을 생각한 탓에 놓친 것이 있는데 이 문제는 수학 문제이기도 하지만 가장 중요한 목적은 가능하다면 5kg와 3kg를 이용해서 배달을 하는 게 목적이다.
예를 들어서 19kg이라면 5kg 두 개 3kg세개를 해서라도 배달을 해야 하는데 우리의 목표인 것
1) 설탕의 무게 N (Scanner로 입력받는다.)
2) for문의 구조
유의해야 할 점은 정확하게 N킬로그램을 만들 수 있다면, 5kg을 최대한 많이 만들어야 한다. 3kg는 최소로 만들어야 한다.
따라서 바깥 for문의 변수를 i로, 안쪽 for문을 j로 설정하여 조건식 "설탕의 무게=(5*j + 3*i)"를 만족하는 제일 처음의 (i, j) 조합을 구하여 서로 더하면 그게 바로 문제에서 설정한 조건들을 충족시키면서 동시에 봉지의 최소 개수(i+j)이다.
+ Break문 -> 안쪽 for문에서 연산이 끝나고 break로 나가도 바깥 for문의 연산은 실행되기 때문에 바깥 for문에 이름을 주어서 break loop;로 한 번에 바깥 for문까지 빠져나가므로 만약 i의 범위가 엄청 커질 시엔 필요 없는 연산을 줄여 연산 시간을 단축할 수 있다.
Answer
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int sugar=0;
int totalNum=0;
loop: for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 2000; j++) {
sugar = 5 * j + 3 * i;
if (sugar == N) {
sugar = N;
totalNum = i + j;
break loop;
}
}
}
if(totalNum > 0) System.out.println(totalNum);
else System.out.println("-1");
}
}
'Java > BackJoon' 카테고리의 다른 글
[Bac|<joon>] 백준 1712 : 손익분기점 / 사용자입장 , 관건은 처리시간! (0) | 2021.04.27 |
---|---|
[Bac|<joon>] 백준 :1152 : 단어의 갯수 (StringTokenizer) (1) | 2021.04.23 |
[Bac|<joon>]백준 : 4344 :평균은 넘겠지 (1) | 2021.04.21 |