본문 바로가기
알고리즘/BOJ

[Python] 백준 1493번: 박스 채우기

by PIAI 2021. 9. 14.

https://www.acmicpc.net/problem/1493

 

1493번: 박스 채우기

세준이는 length × width × height 크기의 박스를 가지고 있다. 그리고 세준이는 이 박스를 큐브를 이용해서 채우려고 한다. 큐브는 정육면체 모양이며, 한 변의 길이는 2의 제곱꼴이다. (1×1×1, 2×2×2,

www.acmicpc.net

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)

댓글