ylab 2023. 1. 25. 16:57

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

 

1817번: 짐 챙기는 숌

첫째 줄에 책의 개수 N과 박스에 넣을 수 있는 최대 무게 M이 주어진다. N은 0보다 크거나 같고 50보다 작거나 같은 정수이고, M은 1,000보다 작거나 같은 자연수이다. N이 0보다 큰 경우 둘째 줄에 책

www.acmicpc.net

 

# 제한 조건 책이 탑처럼 쌓여 있다. => 스택 자료구조 의심
# 예제를 통해서 살펴본결과 큐인데??
from collections import deque
N, M = map(int, input().split(' '))
if N==0 :
    pass
else:
    book_list = list(map(int, input().split(' ')))
    queue = deque(book_list)

# 경우의수 나누기 
# 1. N이 0일경우 print(0)
# 2. 책의 무게가 상자를 넘길경우?! 빼기로 접근??
cnt=0
tmp = M

if N== 0:
    pass
else:
    for _ in range(N):
        a= queue.popleft()
        #print(a)
        #리셋 or 처음
        if M==tmp:
            cnt+=1
            M=M-a
            #print(M)
        
        elif M - a >0:
            M=M-a
            #print(M)
        elif M-a <0 :
            cnt+=1
            M = tmp
            M = tmp -a
            #print(M)
        elif M==0:
            cnt+=1
            M=tmp
            M=tmp-a
            #print(M)
        
        else:
            #cnt+=1
            M=tmp
            #M=tmp-a
            #print(M)

print(cnt)

시간 뺐기기 딱좋은듯 처음에 코드 구상에 경우의수 확실히 나누어야 할듯

예제에서 걸려서 찾았지 아니었으면 못풀었을듯

 

일단 큐를 쓴다는 발상

from collections import deque