Algorithm/Baekjoon

[Python] 13335. 트럭

느낌표 공장장 2022. 10. 5. 20:04

문제

https://www.acmicpc.net/problem/13335

 

13335번: 트럭

입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트

www.acmicpc.net

 


풀이 과정

프로그래머스 - 다리 위를 지나는 트럭과 같은 문제였다. 

큐를 이용하여 문제를 해결하였다.

  1. 트럭이 한 대씩 다리에 올라가게 된다. (다리 => 큐)
  2. 이때 다리에 트럭이 올라갈 자리가 있다면
    1-1. 그리고 해당 트럭의 무게로 다리에 올라가도 된다면, 
           다리에 트럭을 추가해주고, 현재 다리의 무게를 기록한다. (시간 + 1)
    1-2. 트럭의 무게 때문에 다리에 올라갈 수 없다면,
            0을 다리에 추가해준다. (시간 + 1)
  3. 다리에 빈자리가 없다면, 다리의 맨 앞의 트럭을 내보낸다.
  4. 마지막 트럭까지 다리에 올렸다면, 여태까지의 시간 + 다리의 길이(마지막 트럭이 다리를 지나야 하므로)를 return 해준다.

 


코드

from collections import deque

n, bridge_l, bridge_w = map(int, input().split())
trucks = list(map(int, input().split()))

now_weight = 0
now_length = 0
bridge = deque()
time = 0
for truck in trucks:
    while True:
        if now_length + 1 <= bridge_l:   # 다리에 트럭 올라갈 자리 있다면
            if now_weight + truck <= bridge_w:  # 무게도 충분하다면
                now_weight += truck
                now_length += 1
                bridge.append(truck)
                time += 1
                break
            else:   # 무게 초과되는 경우 => 다른 트럭 빼내야함
                bridge.append(0)
                now_length += 1
                time += 1
        else:   # 다리 full이라면 => 맨 앞 트럭 꺼내도 됨
            t = bridge.popleft()
            now_weight -= t
            now_length -= 1

print(time + bridge_l)

'Algorithm > Baekjoon' 카테고리의 다른 글

[Python] 15586. MooTube (Gold)  (0) 2022.10.18
[Python] 15991. MooTube (Silver)  (0) 2022.10.05
[Python] 17609. 회문  (1) 2022.09.22
[Python] 24553. 팰린드롬 게임  (0) 2022.09.19
[Python] 3048. 개미  (0) 2022.09.18