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은 자연스럽게 해결되는 부분이었다.
그 결과 깔끔한 코드 완성!
'Algorithm' 카테고리의 다른 글
[백준 #2206 파이썬] 벽 부수고 이동하기 (0) | 2022.12.23 |
---|---|
[백준 #2573 파이썬] 빙산 (0) | 2022.12.22 |
[백준 #16234 파이썬] 인구 이동 (0) | 2022.12.19 |
[백준 #2178 파이썬] 미로 탐색 (0) | 2022.10.08 |
[백준 #2667 파이썬] 단지 번호 붙이기 (0) | 2022.10.08 |