티스토리 뷰
프로그램 명: beer (special judge)
제한시간: 1 초
맥주를 좋아하는 클럽에서 정규모임을 가진다. 그들은 뜨뜨무리한 맥주를 아주 싫어한다. 그러나 클럽의 냉장고가 너무 작아서 충분한 양의 맥주를 보관할 수 없다.
그래서 그들은 큰 맥주 전용 냉장고를 주문하기로 했다. 새로운 냉장고는 a*b*c(가로*세로*높이) 인 직육면체 여야 한다.
냉기를 빼앗기지 않도록 냉장고의 겉면적은 가능한 작아야 한다.
예를 들어 , 부피가 12 인 냉장고여야 한다면 가능한 경우는
부피 | 겉 면적 |
---|---|
3 × 2 × 2 | 32 |
4 × 3 × 1 | 38 |
6 × 2 × 1 | 40 |
12 × 1 × 1 | 50 |
이 경우 가장 좋은 선택은 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
TAG
- OOP
- abstraction
- Object Oriented Programming
- 파이선
- markdown
- ContentResolver
- media
- 객체지향
- 우분투
- 추상화
- Video
- 마크다운
- Encapsulation
- ubuntu
- 크롤링
- Polymorphism
- 입장권
- readme.md
- 다형성
- 클래스
- Class
- 리눅스
- Multimedia
- player
- Android
- Linux
- 캡슐화
- 동계
- 올림픽
- 평창
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함