👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=kotlin
👊 도전
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. 설명
- Queue에는 bridge_length개 들어갈 수 있다
- 큐 구조를 이용하여 뒤에서 삽입, 앞에서 뺀다.
- queue.size == bridge_length면 맨 앞을 뺀다.
- 조건을 체크해서 맨 뒤에 트럭을 넣을지, 아무것도 넣지 말지 결정한다.
- 넣을 트럭이 존재하고, 현재 큐에 들어 있는 합과 넣을 트럭이 weight를 만족한다면 뒤에 넣는다.
- 아니라면 0을 넣는다(큐에 들어 있는 트럭들은 앞으로 한 칸 이동할 수 있으므로 0으로 표시).
- 탈출 조건은 큐에 트럭이 더이상 없을 때 이다.
- 큐에 들어 있는 트럭이 없을 때(모두 건넜을 때)이다.