문제
https://programmers.co.kr/learn/courses/30/lessons/42583?language=python3
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈
programmers.co.kr
내 풀이
def solution(bridge_length, weight, truck_weights):
answer = 0
waiting = truck_weights
length_truck = len(truck_weights)
crossed = [] # 지나간 트럭
going = [] # 지나가고 있는 트럭
on_the_bridge = []
while len(crossed) != length_truck:
for i in range(len(going)):
going[i] += - 1
if going and going[0] == 0:
del going[0] #가고있던 트럭 삭제
crossed.append(on_the_bridge.pop(0)) #다 지나간 다리위에 트럭을 crossed에 추가
if waiting and weight >= sum(on_the_bridge) + waiting[0]: #대기중인 트럭중 맨 앞의 트럭과 다리위의 트럭 총합이 weight보다 작다면
on_the_bridge.append(waiting.pop(0)) #대기중이던 트럭을 다리위에 추가
going.append(bridge_length)
print(going)
answer += 1
return answer
다른 풀이
다른 풀이1. lambda이용
def solution(bridge_length, weight, truck_weights):
answer = 1
before_list = [] # 다리 건너는 트럭
while truck_weights or before_list:
if truck_weights and weight >= truck_weights[0]:
trcuk_val = truck_weights.pop(0)
before_list.append([trcuk_val, 1])
weight -= trcuk_val
while before_list and before_list[0][1] == bridge_length:
weight += before_list.pop(0)[0]
before_list = list(map(lambda x:[x[0],x[1]+1], before_list))
answer += 1
return answer
다른 코드2.
def solution(bridge_length, max_weight, truck_weights):
# FIFO 문제.
bridge = [0]*bridge_length
curr_weight = 0
ans = 0
while len(truck_weights) > 0:
ans += 1
ar = bridge.pop(0)
curr_weight -= ar
if curr_weight + truck_weights[0] > max_weight:
bridge.append(0)
else:
truck = truck_weights.pop(0)
bridge.append(truck)
curr_weight += truck
while curr_weight > 0:
ans += 1
ar = bridge.pop(0)
curr_weight -= ar
return ans
최근 다시 풀어봄
def solution(bridge_length, weight, truck_weights):
bridge = [0] * bridge_length
time = 0
truck_weights.reverse()
while len(truck_weights) > 0:
bridge.pop(0)
if truck_weights[-1] + sum(bridge) <= weight:
bridge.append(truck_weights.pop())
else:
bridge.append(0)
time += 1
return time + bridge_length
'⏳ 알고리즘 > python 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 문제 - LV2. 위장 (0) | 2020.01.20 |
---|---|
알고리즘 문제 - LV2. 프린터 (0) | 2020.01.19 |
알고리즘 문제 - LV1. K번째 수 (0) | 2020.01.17 |
알고리즘 문제 - LV1. 가운데 글자 가져오기 (0) | 2020.01.17 |
알고리즘 문제 - LV2. 탑 (0) | 2020.01.15 |