본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 16306번 Cardboard Container

by 현장 2026. 1. 12.

-Code

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

public class BOJ16306 {
    public static void main(String[] args) throws Exception {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));

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

        List<Integer> divList = new ArrayList<>();
        for (int n = 1; n <= Math.sqrt(v) + 1; n++) {
            if (v % n == 0) divList.add(n);
        }
        // 정답 구하기
        int answer = Integer.MAX_VALUE;
        for (int i = 0; i < divList.size(); i++) {
            int valFirst = divList.get(i);
            for (int j = i; j < divList.size(); j++) {
                int valSecond = divList.get(j);
                if (v % (valFirst * valSecond) == 0) {
                    int valThird = v / (valFirst * valSecond);
                    // 각 마주보는 변을 구하고 * 2
                    int result = 2 * (valFirst * valSecond + valFirst * valThird + valSecond * valThird);
                    answer = Math.min(answer, result);
                }
            }
        }
        System.out.println(answer);
    }
}

처음에 한 가지 방식만으로 계산해서 계산식이 틀렸습니다. 그래서 접근 방법을 보니 약수들을 가지고 각 변에 사용하는 개수를 구하고 마주 보는 변을 구하기 위해 *2 하는 방식을 알게 되어 로직을 짰고 추가적으로 세 변의 크기가 같은 경우를 빼버려서 해당 부분을 수정하니 해결되었습니다.