stack이나 queue 문제로 분류되어 있는 문제들은, stack/queue를 생각해내는 것보다 로직을 차근차근 풀어내는게 어려운것 같다.😢
결국 로직이 꼬여서 제한시간(30분)내로 푸는 것에는 실패했다.
다른 사람의 풀이를 참고해서 완성했다.
def solution(bridge_length, weight, truck_weights):
q = [0]*bridge_length
sec = 0
total = 0 # total weight : bridge 위에 있는 트럭들의 총 무게
truck = 0
while q:
sec += 1
truck = q.pop(0)
total -= truck
if truck_weights:
if total+truck_weights[0] <= weight:
truck = truck_weights.pop(0)
q.append(truck)
total += truck
else:
q.append(0)
return sec
한가지 개선한 점은 sum하지 않고 변수에 +/- 계산해서 담도록 했다. 매번 list를 순회하여 sum값을 구하지 않아도 되기 때문에 속도를 개선할수 있다. list가 길어지면 큰 차이가 난다. (n^2 -> n)
참고 : https://docs.python.org/3/library/functions.html#sum
Sums start and the items of an iterable from left to right and returns the total.
아래는 실제 속도 차이다.
sum(q) 사용 | total 변수에 저장 |
---|---|
테스트 1 〉 통과 (12.73ms, 10.3MB) 테스트 2 〉 통과 (1522.65ms, 10.3MB) 테스트 3 〉 통과 (0.02ms, 10.2MB) 테스트 4 〉 통과 (334.66ms, 10.3MB) 테스트 5 〉 통과 (9693.98ms, 10.3MB) 테스트 6 〉 통과 (1664.87ms, 10.2MB) 테스트 7 〉 통과 (7.19ms, 10.3MB) 테스트 8 〉 통과 (0.34ms, 10.1MB) 테스트 9 〉 통과 (5.98ms, 10.3MB) 테스트 10 〉 통과 (0.43ms, 10.3MB) 테스트 11 〉 통과 (0.01ms, 10.1MB) 테스트 12 〉 통과 (0.50ms, 10.2MB) 테스트 13 〉 통과 (3.93ms, 10.2MB) 테스트 14 〉 통과 (0.02ms, 10.2MB) | 테스트 1 〉 통과 (1.05ms, 10.3MB) 테스트 2 〉 통과 (48.05ms, 10.3MB) 테스트 3 〉 통과 (0.02ms, 10.2MB) 테스트 4 〉 통과 (10.14ms, 10.3MB) 테스트 5 〉 통과 (292.72ms, 10.2MB) 테스트 6 〉 통과 (41.65ms, 10.2MB) 테스트 7 〉 통과 (0.75ms, 10.3MB) 테스트 8 〉 통과 (0.13ms, 10.2MB) 테스트 9 〉 통과 (2.95ms, 10.3MB) 테스트 10 〉 통과 (0.18ms, 10.2MB) 테스트 11 〉 통과 (0.01ms, 10.1MB) 테스트 12 〉 통과 (0.24ms, 10.2MB) 테스트 13 〉 통과 (1.04ms, 10.1MB) 테스트 14 〉 통과 (0.02ms, 10.2MB) |