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