티스토리 뷰

알고리즘

맥주 파티

path7inder 2014. 9. 24. 18:45
프로그램 명: beer (special judge)
제한시간: 1 초

맥주를 좋아하는 클럽에서 정규모임을 가진다. 그들은 뜨뜨무리한 맥주를 아주 싫어한다. 그러나 클럽의 냉장고가 너무 작아서 충분한 양의 맥주를 보관할 수 없다.

그래서 그들은 큰 맥주 전용 냉장고를 주문하기로 했다. 새로운 냉장고는 a*b*c(가로*세로*높이) 인 직육면체 여야 한다.

냉기를 빼앗기지 않도록 냉장고의 겉면적은 가능한 작아야 한다.

예를 들어 , 부피가 12 인 냉장고여야 한다면 가능한 경우는

부피겉 면적
3 × 2 × 232
4 × 3 × 138
6 × 2 × 140
12 × 1 × 150

이 경우 가장 좋은 선택은 3 × 2 × 2.

이를 도와 주는 프로그램을 작성하는 것이 일이다.

입력

입력으로 냉장고의 부피 정수 n 이 주어진다. ( 1 <= n <= 2 000 000 000 )

출력

겉 넓이를 최소로 하는 세 정수 a , b , c 를 출력한다. 답이 여러 개인 경우 그 중 하나 만을 출력하고 , 출력하는 순서는 중요하지 않다.

입출력 예

입력

12

출력

3 2 2

입력

13

출력

1 13 1

입력

1000000 

출력

100 100 100 
출처: Northeastern Europe 2007, Northern Subregion


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <math.h>
 
int main()
{
    int n;
    int x,y,z;
    int tempN,tempX,tempY,tempZ;
 
    scanf("%d",&n);
 
    x = (int)pow(n,1.0/3.0); // 세 제곱근을 구합니다.
 
    while((n % x) != 0){
        tempN = n/x;
        x++;
    }
    tempN=(n/x); // n이 나누어 떨어지는 x와 그 몫 tempN
 
    y = (int)pow(tempN,1.0/2.0); // 제곱근
        
    while((tempN % y) != 0){
        z = tempN/y;
        y++;
    }
    z=(tempN/y); // tempN이 나누어 떨어지는 y 그 몫 z
 
    int diff = x-z;
    tempX = x;
    tempZ = z;
    if(diff<0) diff *= (-1);
 
    // 여기는 조금 꼼수입니다. x*z가 다시 더 차이가 적게 쪼개질 
    // 수도 있다는 생각에서
 
    tempN = x * z; 
 
    tempX = (int)pow(tempN,1.0/2.0);
    while((tempN % tempX) != 0){
        tempZ = tempN / tempX;
        tempX++;
    }
    tempZ = (tempN / tempX);
 
    int tempDiff = tempX - tempZ;
    if(tempDiff < 0) tempDiff *= (-1);
 
    if(tempDiff < diff){
        x = tempX;
        z = tempZ;
    }
 
    // 원래 x와 z의 차이보다 x*z의 제곱근으로 분리한 새 x,z의
    // 차이가 적다면 그 것을 채택합니다.
 
    printf("%d %d %d\n",x,y,z);
}

꼼수가 남발합니다...ㅎㅎ

'알고리즘' 카테고리의 다른 글

n번째 숫자 구하기 문제  (0) 2014.09.24
세 거듭제곱 문제  (0) 2014.09.24
소인수 분해 문제  (0) 2014.09.24
이벤트 문제  (0) 2014.09.24
Collatz 추측 문제  (0) 2014.09.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함