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
'Algorithm' 카테고리의 다른 글
[TIL] 99클럽 코테 스터디 14일차 TIL - 그리디 : <백준 14916 거스름돈> 문제 풀이 with python (1) | 2024.11.10 |
---|---|
<백준 17070 : 파이프 옮기기 1 > 문제풀이 with python (0) | 2024.11.10 |
[TIL] 99클럽 코테 스터디 13일차 TIL - 이진탐색 : 백준 10561 징검다리 문제 풀이 with python (0) | 2024.11.09 |
[TIL] 99클럽 코테 스터디 7일차 TIL - <프로그래머스 : 10561 징검다리> 문제 풀이 with python (0) | 2024.11.04 |
[SQL] 프로그래머스 고득점 KIT GROUP BY 문제 정답 (0) | 2024.02.25 |