오늘은 프로그래머스 문제를 풀다가, queue를 사용해야하는 문제를 직면하였고, 사용법에 대해 알아보았다.
우선 문제부터 살펴보면

프로세스 라는 문제이고, 우선순위는 높은숫자가 우선순위를 갖는다.
먼저 queue를 생성하기에 앞서
import java.util.*
import를 시켜준다. 그후, 큐를 생성하는데 나는 여기서 두개의 큐를 생성했다. 하나는 프로세스를 넣을 큐, 다른하나는 해당 프로세스의 인덱스값을 넣을 큐. 이렇게 두개이다.
그후 for문을 이용해서 큐에 원하는 값들을 다 넣어준 후에, while문을 돌려서 큐가 비어있다면 멈추게 했다.
큐에서 값을 꺼내고, 큐에서 maxOrNull함수를 불러와서 큐 안에서 최대값을 불러와줬다.
만약 큐에서 방금 꺼낸값과 최대값이 일치한다면 해당값을 큐에서 빼줬고, 해당값의 인덱스값이 location과 일치한다면 while문을 탈출하고, return시켜줬다.
fun solution(priorities: IntArray, location: Int): Int {
var answer = 0
val queue: Queue<Int> = LinkedList()
val queueOrder: Queue<Int> = LinkedList()
for(i in 0 until priorities.size){
queue.add(priorities[i])
queueOrder.add(i)
}
while (queueOrder.isNotEmpty()){
var value = queue.peek() //2
var orderValue = queueOrder.peek() //0
val maxInQueue = queue.maxOrNull() ?: 0
if(value == maxInQueue){
queue.poll()
queueOrder.poll()
if(orderValue == location){
answer++
break
}else{
answer++
}
}else{
queue.poll()
queueOrder.poll()
queue.add(value)
queueOrder.add(orderValue)
}
}
return answer
}
결론-?
큐 사용하기전 import시켜주기
선언하는 방법
큐에 값 넣기, 빼기
import java.util.*
val 큐이름: Queue<타입> = LinkedList()
큐이름.add(값), 큐이름.poll()