다리를 지나는 트럭
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈
programmers.co.kr
- 내 풀이
- 앞선 트럭이 없는 경우: 다리 길이만큼 시간 소요
- 앞선 트럭이 있는 경우: 앞선 트럭이 다리를 지나친 이후의 거리만큼 시간 추가
- 맨마지막 트럭의 경우: 다리 길이 지난 후 나올 시간 +1 추가
from collections import deque
def solution(bridge_length, weight, truck_weights):
queue=deque(truck_weights)
list=deque()
count=[]
num=0
l_weight=0
answer=0
while queue:
if num!=bridge_length:
if l_weight+queue[0]<=weight:
t=queue.popleft()
list.append(t)
l_weight+=t
count.append(0)
if num:
answer+=count[-2] #앞서 건너는 트럭과의 거리 차이만큼 시간 소요
else:
answer+=bridge_length #다리 제일 앞에 있는 트럭이 소요할 시간
num+=1
for i in range(len(count)):
count[i]+=1
if count[0]==bridge_length:
num-=1
t=list.popleft()
l_weight-=t
del count[0]
answer+=1 #맨 마지막 트럭이 나오는 시간
return answer
print(solution(2, 10, [7,4,5,6]))
print(solution(100, 100, [10]))
print(solution(100, 100, [10,10,10,10,10,10,10,10,10,10]))
#결과
8
101
110
- 다른 사람 풀이
- 지나갈 트럭과 트럭무게를 한 번에 처리할 수 있는 방법
- 다리 길이 만큼 0을 큐(bridge)에 넣은 후
- 트럭이 올라갈 수 있으면 트럭 무게를 큐에 넣고 아니면 0을 삽입
- 큐에서 값을 pop하면서 트럭 이동
- 지나갈 트럭과 트럭무게를 한 번에 처리할 수 있는 방법
from collections import deque
def solution(bridge_length, weight, truck_weights):
bridge = deque(0 for _ in range(bridge_length))
total_weight = 0
step = 0
truck_weights.reverse()
while truck_weights:
total_weight -= bridge.popleft()
if total_weight + truck_weights[-1] > weight:
bridge.append(0)
else:
truck = truck_weights.pop()
bridge.append(truck)
total_weight += truck
step += 1
step += bridge_length
return step
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 2] [2018 KAKAO BLIND RECRUITMENT 3차] 파일명 정렬 (0) | 2022.06.03 |
|---|---|
| [프로그래머스] [Level 2] [다이나믹 프로그래밍] 멀리 뛰기 (0) | 2022.06.01 |
| [프로그래머스] [Level 2] 큰 수 만들기 (0) | 2022.05.11 |
| [프로그래머스] [Level 2] [2018 KAKAO BLIND RECRUITMENT] n진수 게임 (0) | 2022.05.10 |
| [프로그래머스] [Level 2] 다음 큰 숫자 (0) | 2022.05.06 |