코딩테스트

[프로그래머스] 다리를 지나는 트럭 | 스택/큐

Michelle Kim 2023. 5. 10. 01:22
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을 추가해준다.

 

배운점:

무조건 모든 정보를 리스트에 담고 있을 필요는 없다는 점