algorithm | May 20, 2020
bridge_length: 다리길이(num) / weight: 다리가 견딜 수 있는 무게(num) / truck_weights: 트럭별 무게(list)
위의 3가지를 input으로 받아서, 모든 트럭이 다리를 지나려면 몇 초가 걸리는 지 구하시오.
(트럭은 1초에 1만큼 움직인다.)
def solution(bridge_length, weight, truck_weights):
time_count = 0
trucks = [] #다리 위에 있는 트럭 현황
for truck in truck_weights:
if len(trucks) == bridge_length:
trucks.pop(0)
while sum(trucks) + truck > weight:
trucks.append(0)
time_count += 1
if len(trucks) == bridge_length:
trucks.pop(0)
trucks.append(truck)
time_count += 1
answer = time_count + bridge_length
return answer
My Solution 1의 Test Case 실행 결과
테스트 1 〉 통과 (6.52ms, 10.6MB)
테스트 2 〉 통과 (1433.00ms, 10.8MB)
테스트 3 〉 통과 (0.04ms, 10.8MB)
테스트 4 〉 통과 (335.27ms, 10.8MB)
테스트 5 〉 실패 (시간 초과)
테스트 6 〉 통과 (1697.82ms, 10.8MB)
테스트 7 〉 통과 (5.26ms, 10.7MB)
테스트 8 〉 통과 (0.26ms, 10.6MB)
테스트 9 〉 통과 (6.24ms, 10.8MB)
테스트 10 〉통과 (0.30ms, 10.8MB)
테스트 11 〉통과 (0.05ms, 10.7MB)
테스트 12 〉통과 (0.31ms, 10.8MB)
테스트 13 〉통과 (2.14ms, 10.7MB)
테스트 14 〉통과 (0.05ms, 10.7MB)
def solution(bridge_length, weight, truck_weights):
time_count = 0
trucks = []
index = 0
while index < len(truck_weights):
time_count += 1
if len(trucks) == bridge_length:
trucks.pop(0)
if sum(trucks) + truck_weights[index] <= weight:
trucks.append(truck_weights[index])
index += 1
continue
trucks.append(0)
answer = time_count + bridge_length
return answer
My Solution 2의 Test Case 실행 결과
테스트 1 〉 통과 (6.63ms, 10.7MB)
테스트 2 〉 통과 (1353.07ms, 10.7MB)
테스트 3 〉 통과 (0.04ms, 10.8MB)
테스트 4 〉 통과 (357.46ms, 10.7MB)
테스트 5 〉 실패 (시간 초과)
테스트 6 〉 통과 (1799.70ms, 10.8MB)
테스트 7 〉 통과 (5.74ms, 10.7MB)
테스트 8 〉 통과 (0.28ms, 10.7MB)
테스트 9 〉 통과 (6.53ms, 10.7MB)
테스트 10 〉통과 (0.34ms, 10.8MB)
테스트 11 〉통과 (0.04ms, 10.7MB)
테스트 12 〉통과 (0.42ms, 10.6MB)
테스트 13 〉통과 (2.38ms, 10.8MB)
테스트 14 〉통과 (0.04ms, 10.7MB)
def solution(bridge_length, weight, truck_weights):
time_count = 0
trucks = []
index = 0
while index < len(truck_weights):
time_count += 1
sum_trucks = sum(trucks)
if len(trucks) >= bridge_length:
sum_trucks = sum(trucks[-bridge_length+1:])
if sum_trucks + truck_weights[index] <= weight:
trucks.append(truck_weights[index])
index += 1
continue
trucks.append(0)
answer = time_count + bridge_length
return answer
My Solution 3의 Test Case 실행 결과
테스트 1 〉 통과 (6.28ms, 10.7MB)
테스트 2 〉 통과 (5068.36ms, 10.7MB)
테스트 3 〉 통과 (0.04ms, 10.7MB)
테스트 4 〉 통과 (3173.03ms, 10.9MB)
테스트 5 〉 실패 (시간 초과)
테스트 6 〉 실패 (시간 초과)
테스트 7 〉 통과 (15.90ms, 10.6MB)
테스트 8 〉 통과 (0.72ms, 10.5MB)
테스트 9 〉 통과 (365.49ms, 10.8MB)
테스트 10 〉통과 (1.06ms, 10.6MB)
테스트 11 〉통과 (0.04ms, 10.7MB)
테스트 12 〉통과 (2.61ms, 10.7MB)
테스트 13 〉통과 (33.71ms, 10.6MB)
테스트 14 〉통과 (0.04ms, 10.8MB)
def solution(bridge_length, weight, truck_weights):
time_count = 1
index1 = 1
trucks = [(1, truck_weights[0])]
index2 = 0
while index1 < len(truck_weights):
time_count += 1
if time_count - trucks[index2][0] >= bridge_length:
index2 += 1
if sum(x[1] for x in trucks[index2:]) + truck_weights[index1] <= weight:
trucks.append((time_count, truck_weights[index1]))
index1 += 1
answer = time_count + bridge_length
return answer
My Solution 4의 Test Case 실행 결과
테스트 1 〉 통과 (0.87ms, 10.7MB)
테스트 2 〉 통과 (18.85ms, 10.7MB)
테스트 3 〉 통과 (0.04ms, 10.8MB)
테스트 4 〉 통과 (41.61ms, 10.8MB)
테스트 5 〉 통과 (329.19ms, 10.8MB)
테스트 6 〉 통과 (117.35ms, 10.7MB)
테스트 7 〉 통과 (0.87ms, 10.8MB)
테스트 8 〉 통과 (0.22ms, 10.6MB)
테스트 9 〉 통과 (6.17ms, 10.8MB)
테스트 10 〉통과 (0.27ms, 10.8MB)
테스트 11 〉통과 (0.04ms, 10.8MB)
테스트 12 〉통과 (0.46ms, 10.7MB)
테스트 13 〉통과 (1.56ms, 10.8MB)
테스트 14 〉통과 (0.03ms, 10.7MB)
Reference: 프로그래머스 스택/큐 다리를 지나는 트럭 문제