Code in

프로그래머스 큐 프린터 with Kotlin 본문

알고리즘 스터디_문제풀이

프로그래머스 큐 프린터 with Kotlin

heyhmin 2020. 8. 11. 20:12

프로그래머스 큐, 프린터 문제입니다.

IntelliJ에서의 풀이입니다.

import java.util.Queue
import java.util.LinkedList
// Kotlin은 JVM: Java Virtual Machine 을 사용하기 때문에 Java의 Queue를 import합니다.

var location: Int = 2
val priorities: IntArray = intArrayOf(2, 1, 3, 2)
fun solution(priorities: IntArray, location: Int): Int {
    var answer = 0
    data class print(val value: Int, val ff: Boolean)
    // data class 를 사용하여 print라는 데이터 형식을 선언합니다.
    var tmp: print // print 형식의 tmp 변수를 선언합니다.
    var flag: Boolean // Boolean 형식의 flag 변수를 선언합니다.
    
    val waiting: Queue<print> = LinkedList<print>()
    // Queue의 특성 중, 가장 끝 부분에서 삭제하고 가장 앞 부분에서 삽입하는 과정상
    // Array보다는 LinkedList가 더 좋은 효율을 가진다고 한다.

    for (i in priorities.indices){ // .indices는 모든 index들을 의미합니다.
        if (i == location) waiting.add(print(priorities[i], true))
        // location인 경우 해당 pring의 ff를 true로 하여 표시합니다.
        else waiting.add(print(priorities[i], false))
        // 그 외는 false로 표시합니다.
    }

    while (!waiting.isEmpty()){ // 대기열이 존재할 때
        flag = false // 프린트를 할지 결정하는 flag입니다.
        tmp = waiting.poll() // 대기열에서 1개를 빼줍니다.

        for ( i in waiting ) { // 중요도가 높은 프린트가 있는지 확인합니다.
            if (tmp.value < i.value) {
                flag = true
                break
            }
        }

        if (flag){ // 프린트를 하지 않고 뒤로 대기열을 조정합니다.
            waiting.add(tmp)
        }else{ // 프린트를 하고 location인 프린트일 경우 반복을 멈춥니다.
            answer++
            if (tmp.ff){
                waiting.clear()
            }
        }
    }

    return answer
}
fun main() {
    print(solution(priorities, location)) // 1
}

URL: https://programmers.co.kr/learn/courses/30/parts/12081

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments