백준 1493번 박스 채우기

DARTZ·2022년 5월 12일
0

알고리즘

목록 보기
53/135
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 # 쉬프트 연산 3이므로 8을 곱하게 된다.
    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)
profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글