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

SoyuliaSoyulia
2 min read

💡문제 분석 요약

-- 문제 --

입력 : bridge_length,weight, truck_weights

  • 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너기

  • bridge_length: 다리에 올라갈 수 있는 최대 트럭 수

  • weight : 다리가 견딜 수 있는 무게

  • 다리에 완전히 오르지 않은 트럭의 무게는 무시

  • truck_weights: 트럭 별 무게

💡알고리즘 설계

  1. 함수를 이용하여 매개변수 입력

  2. 시간초기화, 다리 건너는 중인 리스트 생성

  3. 트럭 무게>0이면 대기중인 트럭이 존재한다는 의미로 반복문 시행

  4. 현재 다리무게와 weight비교시행

💡코드

def solution(bridge_length, weight, truck_weights):
    time = 0
    bridge=[0]*bridge_length
    current_weight = 0
    while truck_weights>0:
        if current_weight - truck_weights[0]<=weight:
            current_weight+=truck_weights[0]
            bridge.append(truck_weights.popleft())
        else:
            bridge.append(0)
    return answer

💡시간복잡도

O(N)

💡틀린 이유

  1. 접근 방식 단순함.

  2. 문제의 조건을 구현하는 능력이 떨어진다.

  3. deque개념 부족

  4. current_weight - truck_weights[0] / answer : 문제 이해 부족.

💡틀린 부분 수정 or 다른 풀이

from collections import deque

def solution(bridge_length, weight, truck_weights):

    time = 0
    bridge = deque([0] * bridge_length)  # [0]*bridge_length 을 덱으로 변환
    truck_weights = deque(truck_weights) # 리스트를 덱으로 변환

    currentWeight = 0
    while len(truck_weights) > 0:
        time = time + 1

        currentWeight = currentWeight - bridge.popleft()

        if currentWeight + truck_weights[0] <= weight:
            currentWeight = currentWeight + truck_weights[0]
            bridge.append(truck_weights.popleft())

        else: 
            bridge.append(0)

    time = time + bridge_length

    return time

💡느낀점 or 기억 할 정보

  1. 처음 코테를 접하다보니 접근하는데 어려움을 느낌. -> 문제 많이 접해보기.

  2. 개념만 공부하지 말고 기본 구현한 코드 많이 접해보기.

  3. deque : 큐의 앞, 뒤에서 삽입, 삭제가 가능한 큐

    💡
    from collections import deque
  4. 문제 꼼꼼히 읽고 이해하고 코드 작성하기.

0
Subscribe to my newsletter

Read articles from Soyulia directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Soyulia
Soyulia