알고리즘
[백준] 1166 선물 - 실버 3
swanzzz
2025. 3. 14. 21:26
반응형
https://www.acmicpc.net/problem/1166
주어진 문제는 다음과 같습니다.
아이들에게 선물한 같은 크기의 작은 박스를 N개 가지고 있습니다.
모든 작은 박스는 정육면체이고 크기는 A * A * A 입니다.
민식이는 이 작은 박스를 크기가 L * W * H 인 직육면체 박스에 모두 넣으려고 합니다.
모든 작은 박스는 큰 박스 안에 있어야 하고 작은 박스의 변은 큰 박스의 변과 평행해야 합니다.
처음에는 문제가 왜 이분탐색인지 이해하지 못했으나
주어진 L, W, H 에 대해 최대공약수를 찾고 이를 이분탐색을 통해 A의 최솟값을 0으로 주고 최대값으로 L, W, H에서 최소 값을 주면 N개의 상자를 모두 넣을 수 있게 됩니다.
즉 더 큰 A가 최대공약수의 조건과 N값을 충족할때 포인터를 옮겨 문제를 해결해야 하는 것입니다.
import sys
input = sys.stdin.readline
N, L, W, H = map(int, input().split())
start, end = 0, max(L, W, H)
for _ in range(100):
medium = (start + end) / 2
count = (L // medium) * (W // medium) * (H // medium)
if count >= N:
start = medium
else:
end = medium
print("%.10f" %(end))
[결과]
반응형