본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다
파이썬 코드
# deque
from collections import deque
# 다리를 지나는 트럭
def solution(bridge_length, weight, truck_weights):
# deque 변환
truck_weights = deque(truck_weights)
answer = 0
# 현재 다리위의 무게
cur_weight = 0
# 현재 다리위의 트럭을 나타내는 리스트
cur_bridge = deque([0]) * bridge_length
# 경과된 시간
time = 0
# 다리 건너기
while truck_weights:
# 매 반복시 시간 더하기 (초 경과)
time += 1
# 초 경과 시, 맨 끝의 트럭을 완주 처리
completed_truck = cur_bridge.popleft()
# 다리위의 무게 그만큼 빼기
cur_weight -= completed_truck
# 다리가 트럭을 수용할 수 있는 경우
# 현재 다리 위 무게 + 다음 트럭 무게
if cur_weight + truck_weights[0] <= weight:
# 트럭
truck = truck_weights.popleft()
# 트럭 넣기
cur_weight += truck
cur_bridge.append(truck)
# 마지막 트럭인 경우
if not truck_weights:
time += bridge_length
break
# 수용할 수 없을 때는 이동시키기
else:
cur_bridge.append(0)
return time
Comment
먼저 들어오는 것이 먼저 나가므로 deque를 collections 모듈로부터 불러와서 사용해야한다. while문으로 모든 트럭이 빠져 나갈 때까지 코드를 실행하고 트럭이 나갈때, 트럭이 들어올 수 있을 때, 트럭이 들어오지 못할 때를 분기하여 경과된 시간을 구해야한다. 또 여기에 더해서 다리의 길이를 염두해서 트럭이 다리에서 빠져나가는 것을 시뮬레이션해야 하는데, 나는 이 방법을 찾지 못해서 애먹었다. 다리의 길이만큼의 별도의 리스트를 만들어 트럭이 들어가는 분기에서 append, 매반복문에서 가장 앞의 요소를 빼기위해 popleft()메소드를 사용하면 된다.
Reference
'programming study > Algorithm' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자 - python 풀이 (0) | 2021.04.25 |
---|---|
[프로그래머스] 프린터 - python 풀이 (0) | 2021.04.25 |
[프로그래머스] 문자열 내 p와 y의 개수 - python 풀이 (0) | 2021.04.21 |
[프로그래머스] 완주하지 못한 선수 - python 풀이 (0) | 2021.04.21 |
[프로그래머스] 문자열 내 마음대로 정하기 - python 풀이 (0) | 2021.04.21 |