Published 2022. 12. 21. 11:15
n,w,l = map(int,input().split())
truck =  list(map(int,input().split()))
bridge = [0]*w
cnt = 0

while bridge:
    cnt += 1
    bridge.pop(0)
    if truck:
        if sum(bridge) + truck[0] > l:
            bridge.append(0)
        else:
            bridge.append(truck.pop(0))
print(cnt)

예전에 프로그래머스에서 풀어본 경험이 있어서 복습 겸 다시 풀어보게 되었다.

 

생각한 방법

1. 비어있는가? => 무조건 추가

2. 비어있지 않은가?

2-1 다리위에 새로운 걸 추가해도 되는가?

yes : 추가한다.

no : 패스

 

이 생각을 가지고 구현을 시작했다.

여기서 더 고려되어야 하는 조건은 다리의 길이, 다리의 길이를 어떻게 할까 고민해보다가 0으로 만들어진 리스트를 먼저 만들어서 이 길이를 지키도록 유지해주도록 설정하였다. 

 

일단 항상 진행은 되어야 하므로 가장 왼쪽의 값을 먼저! 빼준 다음부터 위에서 생각한 방법대로 조건을 고려해주었다. 

 

처음에는 bridge가 [0]*w와 같은 지 한번 물어보고 같으면 새 값을 무조건 추가해주기로 했다. 그런데 생각을 하다보니 1의 조건을 2에 귀속시킬 수 있다는 생각이 들었다. 

bridge의 전체 합을 기준으로 하중을 넘으면 0을 넣고, 아니면 트럭에서 뽑은 값을 넣는 방식으로 정리해보니 1은 자연스럽게 해결되는 부분이었다. 

 

그 결과 깔끔한 코드 완성!

 

복사했습니다!