본문 바로가기

백준/C++

[Baekjoon/C++] 3595번 - 맥주 냉장고

[백준] Baekjoon Online Judge

문제로 이동

 

문제

맥주를 좋아하는 창영이는 냉장고에 맥주를 보관한다. 일반 냉장고에 음식과 맥주를 함께 보관하다보니 창영이의 냉장고에는 맥주를 넣을 곳이 점점 없어지고 있었다. 창영이는 맥주 전용 냉장고를 만들기로 결심했다.

창영이가 만들 냉장고는 a × b × c 크기의 직육면체이고, n개의 맥주 박스를 보관할 수 있다. 맥주 박스는 크기가 1 × 1 × 1인 정육면체이다. 창영이는 맥주를 신선하게 보관하기 위해서, 냉장고의 겉넓이를 가능한 작게 만들려고 한다.

예를 들어, 냉장고의 용량이 12라면, 다음과 같은 네가지 냉장고를 만들 수 있다.

크기 겉넓이
3 × 2 × 2 32
4 × 3 × 1 38
6 × 2 × 1 40
12 × 1 × 1 50

이 경우에 가장 좋은 냉장고는 3 × 2 × 2이다.

n이 주어졌을 때, 창영이가 만들 가장 좋은 냉장고(겉넓이가 가장 작은 냉장고)의 크기를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 106)

 

출력

첫째 줄에 a b c를 출력한다. 만약 겉넓이가 가장 작은 냉장고가 여러 가지인 경우, 아무거나 출력한다.

 


풀이

#include <iostream>
using namespace std;

int a, b, c;
int mn = 10000000;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        if (n % i != 0) continue;

        int num = (n / i);

        for (int j = 1; j <= num; j++) {
            if (num % j != 0) continue;

            int k = num / j;
            int area = (i * j * 2) + (i * k * 2) + (j * k * 2);

            if (area < mn) {
                mn = area;
                a = i;
                b = j;
                c = k;
            }
        }
    }

    cout << a << ' ' << b << ' ' << c << '\n';

    return 0;
}

 브루트포스 방식으로 창영이가 만들 수 있는 냉장고의 모든 크기를 비교해서 가장 작은 것을 출력하도록 했다.