[백준] 2839

ninano05·2026년 4월 1일

풀이 방식: 완전 탐색

  • 반복문 안쪽에 큰 봉지의 반복문을 넣어, 최소 봉지 수를 보장하도록 했다.
  • 그래서 처음 값부터가 이미 5kg를 더 많이 활용하기에, 별도의 최소 값 찾는 로직 필요 없이 값을 찾자마자 반복문을 break한다.
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        int small= 0;
        int big = 0;

        loop:
        for(int s=0; s<(n/3+1); s++) {
            for(int b=0; b<(n/5+1); b++){
                int weight = 3*s+5*b;
                if(weight == n) {
                    small = s;
                    big = b;
                    break loop;
                }
            }
        }
        if(small == 0 && big == 0) {
            bw.write("-1");
        } else {
            bw.write(small + big+"");
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

GPT가 제안하는 개선 코드

import java.util.*;
import java.io.*;

public class Main {
    
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());
        int answer = -1;

        for(int five = n/5; five>=0; five--) {
            int remain = n - (five*5);
            
            if(remain % 3 == 0) {
                int three = remain/3;
                answer = five + three;
                break;
            }
        }
        bw.write(answer+"");
        bw.flush();
        bw.close();
        br.close();
    }
}
  • 먼저 5kg의 봉지로 최대 개수를 채운다.
  • 남은 양에 대해서 3kg로 개수를 채운다.
  • 만약 3kg로 꼭 맞게 채울 수 없다면, 5kg 봉지를 하나 감소한다.
  • 그리고 다시 남은 양에 대해서 3kg 봉지로 채운다.
profile
초보 개발자

0개의 댓글