https://www.acmicpc.net/problem/1493
1. 제일 큰 큐브부터 현재 박스에 몇개까지 들어갈수 있는지 확인한다.
2. 현재 큐브의 갯수와 들어갈수있는 박스의 갯수중 작은값을 박스에 대입한다.
3. 지금까지 들어간 박스의 면적을 센다.
4. 다음연산시 지금까지의 박스의 넓이(before)는 8배가 된다. => 1*1*1, 2*2*2, 3*3*3, ...
length, width, height = map(int, input().split())
n = int(input())
cube = [list(map(int, input().split())) for _ in range(n)]
volume = length * width * height
ans = 0
before = 0
cube.sort(reverse=True)
for w, cnt in cube:
before <<= 3
v = 2 ** w
maxCnt = (length // v) * (width // v) * (height // v) - before
maxCnt = min(cnt, maxCnt)
ans += maxCnt
before += maxCnt
if before == volume:
print(ans)
else:
print(-1)
'알고리즘 > BOJ' 카테고리의 다른 글
[Python] 백준 1135번: 뉴스 전하기 (0) | 2021.09.14 |
---|---|
[Python] 백준 3687번: 박스 채우기 (0) | 2021.09.14 |
[Python] 백준 2262번: 토너먼트 만들기 (0) | 2021.09.14 |
[Python] 백준 2879번: 코딩은 예쁘게 (0) | 2021.09.14 |
[Python] 백준 17619번: 개구리 점프 (0) | 2021.09.14 |
댓글