PS/문제 풀이
[프로그래머스/Swift] 42583번 - 다리를 지나는 트럭
시르베어
2025. 2. 14. 10:13
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
풀이
- 1초 단위로 다리의 무게와 트럭의 상태를 체크
- 1초마다 트럭을 한칸씩 이동 → 다리를 벗어나면 삭제 → 새로운 트럭을 다리에 올림 이 가장 큰 순서
전체코드
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var tructOnBridge: [(Int,Int)] = [] // $0: 트럭의 무게, $1: 다리에서의 위치
var time: Int = 0
var truckIdx: Int = 0 // 다음에 올라갈 트럭의 인덱스
repeat {
// 트럭을 1칸씩 이동
for i in 0 ..< tructOnBridge.count {
tructOnBridge[i].1 += 1
}
// 이동한 트럭의 위치가 다리를 벗어나면 삭제 - 빠질 수 있는 건 젤앞의 트럭만
if let first = tructOnBridge.first, first.1 > bridge_length {
tructOnBridge.removeFirst()
}
// 새로운 트럭이 올라올 수 있으면 올림
let weightSum: Int = tructOnBridge.reduce(into: 0){ $0 += $1.0 }
if truckIdx < truck_weights.count {
if weightSum + truck_weights[truckIdx] <= weight {
tructOnBridge.append((truck_weights[truckIdx], 1))
truckIdx += 1
}
}
time += 1
} while !tructOnBridge.isEmpty
return time
}