본문 바로가기

Algorithm

<백준 13335 : 트럭> 문제풀이 with python

 
 
Today's keyword : 구현, 시뮬레이션

📌 문제설명

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

  • N개의 이 있고, 각 럭은 특정한 무게를 가지고 있습니다.
  • 다리 길이는 W이고, 최대 하중은 L입니다.
  • 트럭은 다리를 건 며, 다 에는 최대 W개의  동시에 올라  있습니다.
  •  리를   리는 시간 1초입니다.
  •  다리를 는 동안 다리 위의 트럭의 총 게는 최대  L   없습니다.
  • 모든 럭이 리를  데 걸리는 최소 시간을 구하는 것이 목표입니다.

 

📌 문제풀이

## 백준 : 트럭 
from collections import deque
n, w, l = map(int, input().split()) # n : 트럭 개수, w: 다리 길이, l: 최대 하중  
trunk = list(map(int, input().split()))

bridge = deque([0]*w)
i = 0
time = 0
while True: 
    
    bridge.popleft()
    if i<=len(trunk)-1:
        if (sum(bridge) + trunk[i] <= l): # 다리 위에 올라간 트럭 무게가 최대 하중보다 작거나 같으면 
            bridge.append(trunk[i])  # 새로운 트럭 추가
            i += 1 
            time += 1
        else: # 기존 트럭 이동 
            bridge.append(0)
            time += 1
    else: 
        bridge.append(0)
        time += 1

    # print(sum(bridge), bridge, i, time)
    if sum(bridge)==0: 
        print(time)
        break
  • 입력 받: 트럭의 개수 n, 다의 길이 w, 최대 하중 l 입력받, 각 럭의 게를 리스트로 저장합니다.
  • 다리 상태 초기화: deque 사용하여 다리 의 트 상태를 관리합니다. 초기에는 다리 위 아무 트럭도 없으므로 [0]*w 초기화합니다.
  • 시간 카운트time 변수를 사용하여 경과 시간을 카운합니다.
  • 트럭 이동 시뮬레이션:
  • 다리에서 트럭을 하나씩 빼내고(popleft), 현재 다리 위의 트럭 무게와 다음 트럭의 무게를 비교합니다.
  • 만약 다리 위의 무게와 다음 트럭의 무게를 합쳐서 최대 하중을 초과하지 않으면, 트럭을 다리에 추가하고 다음 트럭을 추가하기 위해 트럭의 인덱스를 증가시킵니다.
  • 최대 하중을 초과하면, 다리 위에 0을 추가하여 기존 트럭을 이동시킵니다.
  • 매 반복마다 시간을 1초 증가시킵니다.

5.  조건: 다  모든 트럭이 다리를  뮬레이션을 종료하고 총 시간을 출력합니다.

 

#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL