문제가 정말 난해했다. 무슨소리를 하는지도 모르겠고, 전체적으로 조건도 명확하지 않았다;;;
어떻게 풀라는 것인지 ;;;;;
최초에 다리의 길이와, 다리가 견딜 수 있는 하중의 무게, 그리고 지나가려는 트럭의 무게가 인자로 주어진다.
나는 일단 여기서 경과 시간이 1~2, 6~7인것이 이해가 안갔다. 지나갈때 몇초가 걸리는지에 대해 주어지지도 않았고, 스택을 활용한 좋은 문제인것은 맞지만 문제 출제진이 검토를 부실하게 한 것 같다. --;
이 문제를 그림으로 보면 조금 더 잘 와닿아서 그림으로 보겠다.
다리를 지나고 있는 자동차는 7kg 이기 때문에 그냥 지나가고 있다.
이때 1초가 추가된다.
순서대로 다음 자동차가 들어오려 한다. 여기서 헷갈림이시작된다.
자동차가 지나가는 행위 자체를 속도를 결합해서 생각하려고 하면 안된다. 자동차가 초당, 무게당 얼마나 가냐 라는 생각을 없애야 한다!
자동차는 1초당 1만큼을 지나갈 수 있다고 단순하게 생각해야한다. 다리의 길이가 2이기 때문에 다리에는 2개의 자동차가 존재할 수 있고, 지금 4kg의 자동차가 들어오려고 하지만 하중이 견딜 수 없기때문에 2개의 자동차가 올라갈 수 있는 기회를 잃는다. 그래서 이번기회는 pass 된다. 그래서 7kg만 1초당 1씩 총 2만큼 지나갔다.
이후 이전에 들어오지 못했던 4kg 자동차가 들어온다.
이때 5kg인 자동차가 들어오려고 한다. 두개의 자동차를 합쳐서 9kg임으로 하중이 버틸 수 있다.
이때 4kg인 자동차는 이미 1만큼을 갔고, 새로 들어온 자동차는 이제 1만큼을 가게 될 것이다.
이후 4kg 자동차는 지나가고 5kg자동차는 1만큼을 가게된 상태이다. 이때 6kg 자동차가 오려고 하지만 하중이 견딜 수 없어 오지 못한다.
지나가고 나서 6kg 자동차가 들어오게 된다.
그리고 6kg 자동차가 완전히 나갈때까지는 2초가 걸리게 된다.
문제 자체가 너무 설명이 부실했다. 나는 다른분들의 풀이를 보면서 이해한 문제이다.
다시봐도 좀 헷갈리기도 하고 ;;;; 아무튼 너무 부실했다. 이런 문제는 출제되면 안된다!!!!!
암튼, 설명한 그대로를 이해했다면 하단의 풀이는 쉽게 이해될 것이다.
def solution(bridge_length, weight, truck_weights):
bridge = [0]*bridge_length
time = 0
while bridge:
time +=1
bridge.pop(0)
if truck_weights:
if truck_weights[0] + sum(bridge) <= weight:
bridge.append(truck_weights.pop(0))
else:
bridge.append(0)
return time