정리
백준 13335번: 트럭 본문
백준 13335번: 트럭
13335번: 트럭
강을 가로지르는 하나의 차선으로 된 다리가 하나 있다. 이 다리를 n 개의 트럭이 건너가려고 한다. 트럭의 순서는 바꿀 수 없으며, 트럭의 무게는 서로 같지 않을 수 있다. 다리 위에는 단지 w 대의 트럭만 동시에 올라갈 수 있다. 다리의 길이는 w 단위길이(unit distance)이며, 각 트럭들은 하나의 단위시간(unit time)에 하나의 단위길이만큼만 이동할 수 있다고 가정한다. 동시에 다리 위에 올라가 있는 트럭들의 무게의 합은 다리의 최대하중인 L보다 작거나 같아야 한다. 참고로, 다리 위에 완전히 올라가지 못한 트럭의 무게는 다리 위의 트럭들의 무게의 합을 계산할 때 포함하지 않는다고 가정한다.
www.acmicpc.net
덱(deque)을 활용하여 풀었다
- 트럭의 무게를 리스트에 저장한다
- 다리의 길이 w 길이를 가진 덱을 선언한다. 이 덱은 다리의 상황을 나타낸다
- 트럭의 무게를 저장한 리스트가 빌 때까지 while문을 돌린다
- 트럭의 무게를 저장한 리스트[0] + 덱의 요소들의 합 <= L(다리의 최대하중) 일 경우
- 덱의 가장 왼쪽에 (트럭의 무게를 저장한 리스트[0]) 을 추가하고 무게를 저장한 리스트에서는 pop()한다
- 트럭의 무게를 저장한 리스트[0] + 덱의 요소들의 합 > L(다리의 최대하중) 일 경우
- 트럭이 다리에 진입을 못하는 상황이다. 이 경우에는 다리에 있는 트럭들만 한 칸씩 이동하므로 덱의 가장 왼쪽에 0을 추가한다
- time을 1 증가하고 덱의 가장 오른쪽을 pop()한다
- 트럭의 무게를 저장한 리스트[0] + 덱의 요소들의 합 <= L(다리의 최대하중) 일 경우
- 덱에 0만 남아 있을 경우에는 time을 출력하면 된다
- 덱에 0 이외에 다른 숫자가 있는 경우
- 이는 다리(덱)에 트럭이 남아 있는 경우이다
- 덱의 왼쪽에서부터 탐색하여 0이 아닌 숫자가 저장된 곳을 찾아야 한다. 0이 아닌 곳을 찾으면 time + w - (0이 아닌 곳의 인덱스)를 출력하면 된다
아래는 파이썬 코드이다
'Programming > 백준 BOJ' 카테고리의 다른 글
백준 19699번: 소-난다! (0) | 2021.01.31 |
---|---|
백준 1669번: 멍멍이 쓰다듬기 (0) | 2021.01.13 |
백준 1339번: 단어 수학 (0) | 2021.01.11 |
백준 1251번: 단어 나누기 (0) | 2021.01.11 |
백준 1654번: 랜선 자르기 (0) | 2021.01.05 |
Comments