1. 문제
링크 : 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
트럭 갯수 : n, 다리의 길이 : w, 다리의 최대 하중 : L
- w대의 트럭만 동시에 올라갈 수 있다.
- 단위 시간에 하나의 단위 길이만큼 이동한다고 가정
- 다리 위에 올라가있는 트럭의 무게 합 <= L
- 이 때 모든 트럭이 다리를 건너는 최단시간을 구하는 프로그램 작성해라.
2. 풀이
풀이 - 큐
- 건너지않은 트럭이 담긴 nList와 다리 위에 있는 트럭이 담긴 bridge => deque 사용- nList에서 트럭을 뺄 때와 빼지 않을 때를 고려한다.
반복문 사용
- 공통적으로 시간+1, bridge에서 하나를 뺀다.(bridge는 처음에 w*0으로 초기화)
- nList가 비워있지 않을 때, 다리 위에 올라가있는 트럭의 무게 합이 L보다 작거나 같을 때만 nList에서 트럭을 빼고 bridge에 더한다.
- bridge가 다 비워졌을 때 반복문을 종료한다.
3. Python 코드
<python />
import sys
from collections import deque
input = sys.stdin.readline
# n : 트럭 갯수, w : 다리의 길이, L : 다리의 최대 하중
[n, w, L] = list(map(int, input().split(' ')))
nList = deque(map(int, input().split(' '))) # 건너지 못한 트럭
answer = 0
bridge = deque([0]*w) # 다리 위에 있는 트럭
idx = 0
summary = 0
while True :
answer+=1
bTruck = bridge.popleft()
summary-=bTruck
if len(nList) !=0 :
if summary+nList[0] <= L :
nTruck = nList.popleft()
bridge.append(nTruck)
summary+=nTruck
else :
bridge.append(0)
if not bridge :
break
print(answer)
3.1. 후기 및 보완할 점

19~21줄을 밖으로 빼는 것, 그리고 조건문에서 헤맨 것 같다.좀 더 흐름을 익히는 게 필요한 듯하다...
'Algorithm' 카테고리의 다른 글
[Algorithm][Python3][BOJ 1300] K번째 수 (0) | 2022.02.09 |
---|---|
[Algorithm][BOJ 9251] LCS (0) | 2022.02.02 |
[Algorithm][Programmers] 주식 가격 - python (0) | 2022.01.26 |
[Algorithm][BOJ 15565] (Python) 귀여운 라이언 (0) | 2022.01.25 |
[Algorithm] 시간 복잡도와 Big-O 표기법 (0) | 2022.01.02 |