[Kotlin/프로그래머스] 코딩테스트 연습 > 스택/큐 > 다리를 지나는 트럭

👀 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=kotlin

👊 도전

1. 설계

  1. 문제 조건에 맞게 진행

2. 구현

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
import java.util.*

class Solution {
    fun solution(bridge_length: Int, weight: Int, truck_weights: IntArray): Int {
        var time = 0
        val queue: Queue<Int> = LinkedList()
        var i = 0
        var sum = 0

        while (true) {
            if (sum == 0 && queue.size == bridge_length && queue.all { it == 0 }) break
            time ++
            if (queue.size == bridge_length) {
                sum -= queue.poll()
            }
            val addItem = if (i < truck_weights.size) truck_weights[i] else 0
            if (queue.size < bridge_length && sum + addItem <= weight) {
                queue.offer(addItem)
                sum += addItem
                i ++
            } else {
                queue.offer(0)
            }
        }
        return time
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. Queue에는 bridge_length개 들어갈 수 있다
    • 큐 구조를 이용하여 뒤에서 삽입, 앞에서 뺀다.
    • queue.size == bridge_length면 맨 앞을 뺀다.
  2. 조건을 체크해서 맨 뒤에 트럭을 넣을지, 아무것도 넣지 말지 결정한다.
    • 넣을 트럭이 존재하고, 현재 큐에 들어 있는 합과 넣을 트럭이 weight를 만족한다면 뒤에 넣는다.
    • 아니라면 0을 넣는다(큐에 들어 있는 트럭들은 앞으로 한 칸 이동할 수 있으므로 0으로 표시).
  3. 탈출 조건은 큐에 트럭이 더이상 없을 때 이다.
    • 큐에 들어 있는 트럭이 없을 때(모두 건넜을 때)이다.

👏 해결 완료!