본문 바로가기

Algorithm의 모든것

[Algorithm의 모든것] (Swift)프로그래머스-다리를 지나는 트럭

문제

 

프로그래머스의 [정수 제곱근 판별] 문제

 

코드 보기
더보기

내풀이

import Foundation

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
    var answer = 0
    var timeOnBridge: [Int] = [] //트럭이 다리에 오른 시간을 저장
    var bridgeWeight = 0
    var truckOnTheBridge: [Int] = []
    var waitingTruck = truck_weights

    while true {
        answer += 1

        if let truck = truckOnTheBridge.first, (answer-timeOnBridge.first!) == bridge_length {
            truckOnTheBridge.removeFirst()
            timeOnBridge.removeFirst()
            bridgeWeight -= truck
        }

        if let truck = waitingTruck.first, (bridgeWeight + truck) <= weight {
            truckOnTheBridge.append(truck)
            timeOnBridge.append(answer)
            bridgeWeight += truck
            waitingTruck.removeFirst()
        }

        //print("경과시간: \(answer), 다리를 건너는 트럭: \(truckOnTheBridge), 대기 트럭: \(waitingTruck)")
        if truckOnTheBridge.isEmpty && waitingTruck.isEmpty {
            return answer
        }
    }

    return answer
}
느낀점

트럭이 다리를 지나가기 까지 걸리는 시간을 어떻게 각각 가지고 있을까에 대해 어마어마한 시간을 쓴거 같아요 ㅠㅠ
결론적으로
1) 각각 트럭이 다리에 오를 때에 현재 시간을 timeOnBridge에 저장하고
2) 현재 시간에서 그 시간을 빼준 값이 다리 길이 일 때에 트럭을 내려주면 된다.
라는 생각을 하기까지 꽤나 많은 시간을 쓴거 같아요 ㅠㅠ
시간(길이)이 경과하면 큐(다리 위 트럭, 대기 중인 트럭)에 있는 데이터를 빼내야 하는데 어떻게 쉽고 간단하게 이 로직으로 표현할지에 대해 생각 하는데 머리에 쥐가날뻔...
무튼 ! 스택/큐 문제의 개념을 익히는데에 도움이 될만한 문제였던 것 같습니다.