알고리즘/프로그래머스
프로그래머스 다리를 지나는 트럭 (Python)
방구석프로
2024. 4. 13. 10:10
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