티스토리 뷰

문제

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
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함