코딩테스트 준비(kotlin)/자료구조
[프로그래머스 kotlin] 다리를 지나는 트럭
1chanhue1
2024. 7. 9. 21:30
fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
var answer = 0
val truckQueue: Queue<Int> = LinkedList()
val bridge: Queue<Int> = LinkedList()
// 초기 다리는 빈 공간으로 채웁니다.
for (i in 0 until bridge_length) {
bridge.add(0)
}
// truck_weights 배열의 트럭을 truckQueue에 추가
for (i in truck_weights.indices) {
truckQueue.add(truck_weights[i])
}
var current_weight = 0
while (bridge.isNotEmpty()) {
answer++
// 다리를 지난 트럭의 무게를 현재 무게에서 뺍니다.
current_weight -= bridge.poll()
// 대기 중인 트럭이 있는 경우
if (truckQueue.isNotEmpty()) {
// 현재 다리 위의 트럭들의 무게와 다음 트럭의 무게 합이 다리의 최대 하중을 넘지 않는 경우
if (weight >= current_weight + truckQueue.peek()) {
val truck = truckQueue.poll() // 다음 트럭을 대기열에서 꺼냅니다.
bridge.add(truck) // 다리에 트럭을 추가합니다.
current_weight += truck // 현재 다리 위의 트럭 무게를 갱신합니다.
} else {
bridge.add(0) // 트럭이 올라가지 못하면 빈 공간을 추가합니다.
}
}
}
return answer
}
문제해결 POINT
- 현재 다리 위의 트럭들을 큐(Queue)로 관리한다.
- 다리를 건너는 트럭의 위치를 트래킹하여 시간이 지남에 따라 위치를 업데이트한다.
- 각 시간마다 새로운 트럭이 다리에 올라갈 수 있는지 체크하고, 다리에 올라갈 수 있다면 트럭을 큐에 추가한다.
- 트럭이 다리를 완전히 건너면 큐에서 제거한다.