[프로그래머스] 프린터 Kotlin

Heejin Ryu·2021년 7월 21일
0

Algorithm

목록 보기
11/14

fun solution(priorities: IntArray, location: Int): Int {
        var printQueue = priorities.withIndex().toMutableList()
        var count = 0
        while (printQueue.isNotEmpty()) {
            val current: IndexedValue<Int> = printQueue.first()
            printQueue.removeAt(0)
            if(printQueue.any { current.value < it.value }) {
                printQueue.add(current)
            } else {
                count += 1
                if (location == current.index) {
                    break
                }
            }
        }
        return count
    }
  1. 인덱스를 어떻게 유지하지? 라는 고민이 있었다.
    -> withIndex()로 해결되었다.
    -> IndexedValue<>로 받아야한다.
  2. 이중 loop를 돌면서 현재와 현재보다 큰 애들이 있는지를 찾아야하는데 어떻게 간단하게 구현하지?
    -> any로 간단하게 구현 가능. 현재보다 큰 애들이 있으면 true를 내놓도록.

처음에 생각을 어렵게 했다가, 가장 큰거부터 오른쪽으로 원형 배열처럼 계속 돌면서 지워나가면 되겠다고 생각했다.

근데 그렇게 생각을 했어도 큐가 생각이 안났다 ㅠㅠ

원형 배열을 만드느라고 인덱스 가지고 고생하다가, 결국 큐를 써야한다는 걸 알고 코드를 참고했다..

  1. Priority array를withIndex().toMutableList()를 통해 인덱스와 함께 리스트를 만들어야한다. Queue를 써도 되지만 List를 통해서도 가능하기 때문
  2. 리스트가 비지 않았다면 가장 첫값을 꺼내와서 나머지 값들과 비교한다. 이 때 any를 사용하는데, '1개라도 조건에 맞는게 있다면' 이다. 1개라도 현재값보다 큰게 있다면 다시 뒤에다가 add
  3. 아니라면 count를 올려주고, 혹시 현재 index(IndexedValue라 가능)이 location 이랑 같다면 끝내고 count를 반환한다.
profile
Chocolate lover🍫 & Junior Android developer🤖

0개의 댓글