✔Algorithm/programmers/스택, 큐/level2/ 다리를 지나는 트럭(with python)

yellow·2021년 6월 23일
0

알고리즘 문제

목록 보기
51/58

📖 문제

📝 풀이 과정

  • 실제 트럭이 다리 위를 올라가는 것처럼 구현했다.
  • 리스트 bridge로 다리를 표현했다.
    -> 요소가 0 : 해당 구역에는 트럭이 올라가있지 않다.
    -> 요소가 0이 아니면 : 해당 구역에 트럭이 올라가 있다. 숫자는 그 트럭의 무게를 나타낸다.
  1. bridge 위에 있는 트럭을 모두 앞으로 1칸 전진
  2. 대기중인 트럭이 남아있다면,
    다음에 다리를 건너는 트럭의 무게 + 현재 다리 위에 있는 트럭들의 무게의 합
    을 검사해서
    -> weight보다 작은 경우에만, 다음 트럭을 다리 위에 올려놓는다.

⌨ 코드

from collections import deque
def solution(bridge_length, weight, truck_weights):
    answer = 0
    bridge = deque([0] * bridge_length)
    truck_weights = deque(truck_weights)
    on_bridge = 0 # 다리 위에 올라간 트럭의 무게합을 담는 변수

    while bridge:
        answer += 1 # 시간 +1초
        on_bridge -= bridge.popleft() # 1칸 전진

        # 대기중인 트럭이 남아있다면
        if truck_weights:
            if truck_weights[0] + on_bridge <= weight:
                bridge.append(truck_weights[0])
                on_bridge += truck_weights.popleft()
            else:
                bridge.append(0)
    return answer

😊 느낀점

어떻게 구현을 해야할지 감도 안 잡히고 입출력 예시도 이해가 되지 않아서 다른 사람의 풀이를 보고 나서야 풀 수 있었다. 다음에 꼭 다시 풀어볼 것!
그리고 다리 위에 올라가있는 트럭의 무게 합을 구할 때 list의 sum()을 사용하면 sum()의 시간복잡도가 O(N)이기 때문에 시간 초과가 났다. 항상 메소드를 사용할 때 시간복잡도를 염두에 두고 풀어야겠다.

profile
할 수 있어! :)

0개의 댓글