[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 다리를 지나는 트럭 (프로그래머스 lv2, 스위프트)

inu 2022. 3. 17. 20:14
반응형

문제

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

 

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

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

programmers.co.kr

풀이

import Foundation

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {    
    var time = 0
    var bridge = Array(repeating: 0, count: bridge_length)
    var trucks = truck_weights
    var w = 0

    while !bridge.isEmpty {
        w -= bridge.removeFirst()
        time += 1

        if bridge.count < bridge_length {
            if let t = trucks.first {
                if t + w <= weight {
                    w += trucks.removeFirst()
                    bridge.append(t)
                } else {
                    bridge.append(0)
                }
            }
        }
    }

    return time 
}
  • 무게합을 reduce를 사용하지 않고 구하는 방법을 떠올리지 못해서 시간초과가 났던 문제이다.
  • 하나씩 돌리면서 w를 더하고 빼주는 방식을 채택하면 매번 reduce를 통해 무게합을 계산할 필요가 없다.
반응형