[프로그래머스] 다리를 지나는 트럭 in Kotlin

ddanglehee·2022년 8월 6일
0

코딩테스트 준비

목록 보기
4/18
post-thumbnail
post-custom-banner

📜 문제

문제 링크

💡 나의 풀이

  • 대기중인 트럭은 따로 queue를 두지 않고currentTruckIndex로 현재 다리를 건널 차례인 truck을 가리키게 했다.
  • 다리를 queue로 만들어서 트럭이 다리를 건너는 걸 표현했다.

1. 현재 차례의 트럭이 다리를 건널 수 있으면 다리에 트럭 올리기
    건널 수 없다면, 의미없는 값을 queue에 넣어서 트럭이 다리를 건너는 걸 표현
2. 다리를 다 건넌 트럭 빼기
    queue의 크기가 bridge_length와 같아지면, queue의 첫번째 요소에 해당하는 트럭이 다리를 다 건넜다는 것을 의미한다.
3. 마지막에 answer + bridge_length - 1를 해주는 이유
     내 코드의 while의 조건문을 생각해보면 마지막 트럭이 다리에 오르자마자 while문을 탈출한다. 따라서 마지막 트럭이 다리를 다 건너는 시간까지 더해주어야 했다.

⌨️ 코드

import java.util.*

class Solution {
    fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
        var answer = 1
        var weightSum = 0
        var currentTruckIndex = 0
        val queue = ArrayDeque<Int>()
        
        while (currentTruckIndex < truck_weights.size) {
            // 1. 현재 차례의 트럭이 다리를 건널 수 있으면 다리에 트럭 올리기
            if (weightSum + truck_weights[currentTruckIndex] <= weight) {
                queue.offerLast(currentTruckIndex)
                weightSum += truck_weights[currentTruckIndex++]
            } else {
                queue.offerLast(-1) // 의미없는 값, 트럭이 움직이는 걸 표현하기 위함
            }
            
            // 2. 다리를 다 건넌 트럭 빼기
            if (queue.size == bridge_length) {
                val outIndex = queue.pollFirst()
                if (outIndex != -1) {
                    weightSum -= truck_weights[outIndex]
                }
            } 
            
            answer++
        }
        return answer + bridge_length - 1 // 마지막으로 올라간 트럭이 다리를 다 건너는 시간까지 더함
    }
}
profile
잊고싶지 않은 것들을 기록해요✏️
post-custom-banner

0개의 댓글