본문 바로가기

알고리즘

[Queue] 다리를 지나는 트럭 - 프로그래머스 Swift

 

문제 : https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

 

풀이방법 : 주석참고

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
    var myTruckWeights = truck_weights
    var time = 1
    var terminal = [(Int, Int)]() // (트럭무게, 터널안에 있는 시간)
    terminal.append((myTruckWeights.removeFirst(),1))
    
    while true {
        if let truck = myTruckWeights.first {
            var test = terminal.reduce((0,0)) {($0.0 + $1.0, 0)}
            //터미널 안에있는 트럭들과 다음차의 무게를 더한다음 weight보다 높으면 아무것도 안함
            if truck + test.0 > weight {
   
            } else {
            //낮으면 터미널에 차를 추가시켜줌
                terminal.append((myTruckWeights.removeFirst(),0))
            }
        }
        time += 1
        //터미널 안에있는 차들이 터널 안에 있었던 시간을 1씩 더해줌
        terminal = terminal.map{($0.0, $0.1 + 1)}
        //터미널 안에 있는 시간이 bridge_length와 같아지면 터미널에서 빼줌
        terminal = terminal.filter{$0.1 < bridge_length}
        if terminal.isEmpty &&  myTruckWeights.isEmpty {
            time += 1
            break
        }
    }

    return time
}
반응형