Coding - Algo/python
[프로그래머스] 다리를 지나는 트럭 (python 파이썬)
jainn
2021. 4. 3. 13:33
728x90
문제
programmers.co.kr/learn/courses/30/lessons/42583?language=python3
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이
programmers.co.kr
풀이 및 소스코드
처음에는 cross 덱에 time 덱까지 넣어서 cross.append([truck_weights[0], 0]) 이렇게 해주려고 했으나,
시간 1초 더하는 부분에서
TypeError: unsupported operand type(s) for +: 'int' and 'list'
이런 오류가 떠서
2차원이 아닌 두 개의 덱으로 나눠주었다.
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
cross = deque() #현재 다리 위에 있는 트럭의 무게
time = deque() #현재 다리 위에 있는 트럭에 대한 시간을 담는 리스트
passtruck = [] #건너기 성공한 트럭이 담길 스택(그냥 cnt 해줘도 됐을 것 같음)
n = len(truck_weights)
cross.append(truck_weights[0])
time.append(0) #0초부터 시작
nowindex = 0 #최근에 올린 트럭의 인덱스
while (len(passtruck)<n): #트럭이 모두 건너가면 종료
for i in range(len(time)): #1초의 시간이 흐름을 나타내줌
time[i] += 1
answer += 1 #이것역시
if time[0] == bridge_length: #만약 제일 먼저 들어온 트럭의 거리가 다리 길이와 같으면 빼줌
passtruck.append(cross.popleft())
time.popleft()
if nowindex+1 < n: #지나가야할 트럭이 남았다면 넣어주는 부분
if sum(cross)+truck_weights[nowindex+1]<=weight:
cross.append(truck_weights[nowindex+1])
time.append(0)
nowindex += 1
return answer+1
반응형