기록하고 까먹지 말기

13355 본문

전공/백준

13355

yha97 2023. 3. 9. 20:26

날짜 : 2023. 03. 09

사용 언어 : python

 

문제

 

 

코드

import sys
from collections import deque

n, w, L = map(int, sys.stdin.readline().split())  # 트럭수, 다리 길이, 최대하중
bridge = deque()  # 다리
for i in range(w): bridge.append(0)
temp = list(map(int, sys.stdin.readline().split()))
truck = deque(temp)  # 트럭 무게 입력
total = 0  # 현재 다리의 하중
res = 0
"""print(bridge)
print(truck)"""

while True:
    res += 1
    t = bridge.popleft()  # 빠져나갈 트럭
    total -= t  # 무게 차감
    if len(truck) > 0:  # 트럭이 남아있는 경우
        if (total + truck[0]) <= L:  # 하중 견디는 경우
            next = truck.popleft()  # 진입할 트럭
            bridge.append(next)  # 다리에 추가
            total += next  # 무게 추가
        else:  # 하중 못버티는 경우(0 추가)
            bridge.append(0)
    else:  # 넣을 트럭이 없는 경우
        bridge.append(0)
        flag = True
        for i in bridge:
            if i > 0:
                flag = False
                break
        if flag: break
    #print(bridge, truck)

print(res)

 

 

풀이

- 한 턴이 지나는 경우에는 다리의 가장 앞에 있는 수를 pop한 후 무게를 최신화한다. (초기화 : 0으로 채워진 리스트)

- 다리를 건너지 못한 트럭이 있는 경우 / 없는 경우로 분기

- 건너지 못한 트럭이 있는 경우 큐의 우선순위가 가장 높은 트럭을 추가했을 때 하중을 견디는 경우 / 못견디는 경우로 분기

- 견디는 경우에는 다리에 추가한 후 무게를 최신화 / 견디지 못하는 경우에는 0을 추가

 

- 넣을 트럭이 없는 경우에는 rear에 0을 넣고 bridge의 값이 전부 0인지 체크한다.

- 전부 0이라면 while문 탈출 후 결과 출력 / 아니라면 for문 탈출 후 다시 while문

 

 

알게된 점

- 맨 처음 bridge를 구현할 때 조금 고민했지만 트럭이 없는 케이스를 0으로 채워넣는 것으로 떠올려서 금방 문제의 실마리를 찾을 수 있었다.

- 다만 구현하는 법과 데크 사용 문법에서 버벅이는 바람에 풀이 시간을 꽤나 잡아먹은 것 같다.

 

 

참고 사이트

- 데크 사용 참고 : https://j-ungry.tistory.com/189

 

파이썬 collections deque 함수 (덱,데크) 사용법

https://docs.python.org/3/library/collections.html#collections.deque collections — Container datatypes — Python 3.8.5 documentation collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized containe

j-ungry.tistory.com

 

'전공 > 백준' 카테고리의 다른 글

1916  (0) 2023.03.13
2589  (0) 2023.03.10
2210  (0) 2023.03.08
16234  (0) 2023.03.07
3085  (0) 2023.03.06