1. 문제
https://www.acmicpc.net/problem/1166
1166번: 선물
민식이는 아이들에게 선물할 같은 크기의 작은 박스를 N개 가지고 있다. 모든 작은 박스는 정육면체이고, 크기는 A × A × A 이다. 민식이는 이 작은 박스를 크기가 L × W × H 인 직육면체 박스에
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
# n : 들어갈 작은 박스 수, l : 직육면체 길이, w : 직육면체 너비, h : 직육면체 높이
n, l, w, h = map(int, input().split())
min_f = min(l, w, h)
i = 0
if n <= (l // min_f) * (w // min_f) * (h // min_f):
print(min_f)
else:
mi = 0
ma = min_f
for i in range(30000):
#print("mi :", mi, "ma :", ma)
mid = (mi + ma) / 2
avail = (l // mid) * (w // mid) * (h // mid)
if avail >= n:
mi = mid
else:
ma = mid
#print(mi + ma)
print("{:.9f}".format((mi + ma) / 2))
3. 후기
- 이 문제는 다른 실버 3단계의 문제들보다 어려웠다.
여러번에 '틀렸습니다'와 '런타임 오류(Recursion Error)'들을 받은 끝에 맞출 수 있었다.
이 문제 해결의 가장 큰 문제는 이분 탐색을 어느 시점에 중지하여 리턴해줄지에 대한 것이었고, 각 문제의 조건마다 적절한 리턴 조건이 있어야 한다는 것을 생각해볼 수 있는 문제였다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1213) (0) | 2023.02.01 |
---|---|
(Python)백준 코딩테스트 연습 - 약속(1183) (0) | 2023.01.31 |
(Python)백준 코딩테스트 연습 - 게임(1072) (1) | 2023.01.26 |
(Python)백준 코딩테스트 연습 - 어린 왕자(1004) (0) | 2023.01.24 |
(Python)백준 코딩테스트 연습 - 피보나치 함수(1003) (0) | 2023.01.23 |