[Level 2 / 큐] 다리를 지나는 트럭 + Swift

sanghee·2021년 9월 8일
0

🙈코딩테스트

목록 보기
28/52
post-thumbnail

다리를 지나는 트럭

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

문제 유형: 큐

트럭이 다리라는 배열에 들어간다. 먼저 들어간 트럭이 먼저 나오는, FIFO(First In First Out)구조이기에 큐로 문제를 풀면 된다.

풀이

다리가 트럭이 지나가는 것을 그대로 구현하였다. 현재 트럭은 index로 저장한다. index가 트럭 개수보다 작을 경우에 while문을 돌린다. 시간을 1초 추가하고, 다리에서 하나를 통과시킨다. 현재 다리 무게와 새로운 트럭 무게의 합이 다리의 최대 하중보다 큰 경우에는 다리에 0을 보낸다. 그렇지 않은 경우(새로운 트럭이 다리를 지나는 경우)에는 다리에 트럭을 추가하고, 총 무게를 추가하며 index를 증가한다.

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
    var bridge: [Int] = Array(repeating: 0, count: bridge_length)
    var index = 0
    var time = 0
    var weights = 0
    
    while index < truck_weights.count {
        time += 1
        weights -= bridge.removeFirst()
        
        let truck = truck_weights[index]
        if weights + truck > weight {
            bridge.append(0)
        } else {
            bridge.append(truck)
            weights += truck_weights[index]
            index += 1
        }
    }
    
    return time + bridge_length
}
profile
👩‍💻

0개의 댓글