세준이는 length × width × height 크기의 박스를 가지고 있다. 그리고 세준이는 이 박스를 큐브를 이용해서 채우려고 한다. 큐브는 정육면체 모양이며, 한 변의 길이는 2의 제곱꼴이다. (1×1×1, 2×2×2, 4×4×4, 8×8×8, ...)
세준이가 가지고 있는 박스의 종류와 큐브의 종류와 개수가 주어졌을 때, 박스를 채우는데 필요한 큐브의 최소 개수를 출력하는 프로그램을 작성하시오.
Input | Output |
---|---|
4 4 8 3 0 10 1 10 2 1 | 9 |
4 4 8 3 0 10 1 10 2 10 | 2 |
10 10 11 1 0 2000 | 1100 |
10 10 11 1 0 1099 | -1 |
37 42 59 6 0 143821 1 14382 2 1438 3 143 4 14 5 1 | 5061 |
큐브로 채울 수 있는 공간이 전체 공간보다 작다면 불가능한 경우이다.
# 코드
length, width, height = map(int, input().split())
n = int(input())
cube_cnt = {}
for _ in range(n):
a, b = map(int, input().split())
a = 2 ** a
cube_cnt[a] = b
answer = 0
before = 0
for v, cnt in sorted(cube_cnt.items(), key=lambda x : -x[0]):
before *= 8
max_cnt = (length//v) * (width//v) * (height//v) - before
max_cnt = min(cnt, max_cnt)
answer += max_cnt
before += max_cnt
if before == (length * width * height):
print(answer)
else:
print('-1')