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)로 관리한다.
- 다리를 건너는 트럭의 위치를 트래킹하여 시간이 지남에 따라 위치를 업데이트한다.
- 각 시간마다 새로운 트럭이 다리에 올라갈 수 있는지 체크하고, 다리에 올라갈 수 있다면 트럭을 큐에 추가한다.
- 트럭이 다리를 완전히 건너면 큐에서 제거한다.
'코딩테스트 준비(kotlin) > 자료구조' 카테고리의 다른 글
[프로그래머스 , kotlin] 이중우선순위큐 (0) | 2024.08.01 |
---|---|
[kotlin, 프로그래머스] 베스트앨범 (0) | 2024.07.31 |
[프로그래머스 kotlin] 롤케이크 자르기 (0) | 2024.07.01 |
[프로그래머스 kotlin] 프로세스 (0) | 2024.06.24 |
[프로그래머스 kotlin] 기능개발 (0) | 2024.06.23 |