정리

백준 13335번: 트럭 본문

Programming/백준 BOJ

백준 13335번: 트럭

H.J.Park 2021. 2. 2. 17:29

백준 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만 남아 있을 경우에는 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