queue사용법

quinones·2023년 12월 7일

오늘은 프로그래머스 문제를 풀다가, 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()
profile
이우진

0개의 댓글