https://school.programmers.co.kr/learn/courses/30/lessons/42583

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 해결을 위한 과정

이 문제의 경우 deque를 이용하면 쉽게 해결할 수 있는 문제였습니다.

과정은 다음과 같습니다.

1. 다리에 존재하는 트럭들 한 칸 이동시키기 - queue를 (truck, cnt)로 pair 형태로 넣어두면 cnt를 1 증가시키는 걸로 가능

2. 1의 과정 이 후 제일 앞에 있는 트럭의 cnt가 bridge_length와 같다면 popleft 해주기. (다리를 다 이동한 경우)

3. 다리에 존재하는 트럭들의 무게를 확인하여 남은 트럭 중 제일 앞에 트럭을 올려도 올라가는지 확인

    3-1. 올라갈 수 있다면 다리에 올리기

    3-2. 올라갈 수 없다면 다리에 올리지 않기


소스코드
from collections import deque

def solution(bridge_length, weight, truck_weights):
    answer = 0
    finish = deque()
    moving = deque()
    length = len(truck_weights)
    
    while True:
        if len(finish) == length:
            break
        answer += 1
        for i in range(len(moving)): # 이동
            truck, cnt = moving[i]
            moving[i] = truck, cnt + 1           
        if len(moving) != 0:
            truck, cnt = moving[0] 
            if cnt == bridge_length: # 다리 다 이동하면 finish로 이동
                finish.append(moving.popleft())
        tempWeight = 0
        for i in range(len(moving)):
            truck, cnt = moving[i]
            tempWeight += truck
        if len(truck_weights) != 0 and tempWeight + truck_weights[0] <= weight:
            moving.append((truck_weights[0], 0))
            truck_weights.pop(0)
    return answer

+ Recent posts