def solution(bridge_length, weight, truck_weights):
time = 0
trucks_on_bridge = [0]*bridge_length
sum_trucks_on_bridge=0
while len(trucks_on_bridge):
time+=1
old_truck = trucks_on_bridge.pop(0)
sum_trucks_on_bridge-=old_truck
if truck_weights:
if sum_trucks_on_bridge+truck_weights[0]<=weight:
new_truck = truck_weights.pop(0)
trucks_on_bridge.append(new_truck)
sum_trucks_on_bridge+=new_truck
else:
trucks_on_bridge.append(0)
return time
풀다가 잘 모르겠어서 이분의 풀이를 참고했다.
https://this-programmer.tistory.com/372
[프로그래머스/Level2/파이썬3(python3)] 다리를 지나는 트럭
[프로그래머스/Level2/파이썬3(python3)] 다리를 지나는 트럭 문제 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는
this-programmer.tistory.com
TROUBLE SHOOTING: 처음에 시간과 트럭을 어떻게 관리를 해야되나 막막했다. 처음에 시도한 방법은 이중 리스트로 구현하는 것이었다. [[time1, truck1],[time2,truck2]] 이런식으로. 그런데 이렇게 하다보니 이중 리스트 값을 계속 for 문을 통해서 업데이트를 해줘야 되고, 워낙 문제에 조건이 많다보니 너무 헷갈렸다. 그래서 더 직관적인 위의 풀이를 찾아 선택하게 되었다.
풀이: 없는 경우에는 trucks_on_bridge 에 0을 추가한다.
항상 시간을 +1로 증가시키고 trucks_on_bridge pop을 한다 (0의 값도 pop을 함, 단 0은 없음을 의미)
그리고 조건문으로 만약 새로운 truck 을 bridge에 추가할 수 있는지 확인한다.
만약 trucks_on_bridge 의 sum 이 weight 이하이면 append (truck_weights.pop(0)) 한 값을 해주고,
아니면 앞서 언급했듯이 0을 추가해준다.
배운점:
무조건 모든 정보를 리스트에 담고 있을 필요는 없다는 점
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 | 정렬 (1) | 2023.05.10 |
---|---|
[프로그래머스] k번째수 | 정렬 (0) | 2023.05.10 |
[프로그래머스] 프로세스 | 스택/큐 (0) | 2023.05.06 |
[프로그래머스] 올바른 괄호 | 스택/큐 (0) | 2023.05.05 |
[프로그래머스] 기능개발 | 스택/큐 (0) | 2023.05.05 |