Today
Yesterday
Total
  • [프로그래머스] 프린터 (Kotlin)
    문제풀이/프로그래머스 2021. 7. 2. 23:10

    문제 링크

     

    코딩테스트 연습 - 프린터

    일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

    programmers.co.kr

     

     

    두 가지 방법으로 풀었습니다.

    첫 번째 방법은 ArrayList를 이용한 큐의 구현,

    두 번째 방법은 java.util.ArrayDeque를 import하여 사용.

     

    로직은 동일하며, 다른 사람의 풀이에서도 크게 획기적인 방법은 찾지 못했습니다.

    퍼포먼스는 케이스마다 조금씩 다르나, 평균적으로 아주 약간 ArrayDeque를 이용한 두 번째 방법이 더 좋게 나왔습니다.

    내 풀이(1)

    kotlin
    닫기
    class Solution { ​​​​fun solution(priorities: IntArray, location: Int): Int { ​​​​​​​​var answer = 0 ​​​​​​​​val q = ArrayList<Pair<Int, Int>>() ​​​​​​​​var max_val:Int = 0 ​​​​​​​​priorities.forEachIndexed { ​​​​​​​​​​​​index, value -> q.add(Pair(index, value)) ​​​​​​​​​​​​max_val = if (value > max_val) {value} else {max_val} ​​​​​​​​} ​​​​​​​​var pop_key:Int? = null ​​​​​​​​while (pop_key != location) { ​​​​​​​​​​​​if (q.get(0).second == max_val) { ​​​​​​​​​​​​​​​​pop_key = q.get(0).first ​​​​​​​​​​​​​​​​q.removeAt(0) ​​​​​​​​​​​​​​​​answer++ ​​​​​​​​​​​​​​​​max_val = 0 ​​​​​​​​​​​​​​​​q.forEachIndexed { ​​​​​​​​​​​​​​​​​​​​i, (idx, value) -> max_val = if (value > max_val) {value} else {max_val} ​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​} else { ​​​​​​​​​​​​​​​​q.add(q.get(0)) ​​​​​​​​​​​​​​​​q.removeAt(0) ​​​​​​​​​​​​} ​​​​​​​​} ​​​​​​​​return answer ​​​​} }

     

     

    내 풀이(2)

    kotlin
    닫기
    import java.util.* class Solution { ​​​​fun solution(priorities: IntArray, location: Int): Int { ​​​​​​​​var answer = 0 ​​​​​​​​val q = ArrayDeque<Pair<Int, Int>>() ​​​​​​​​var max_val:Int = 0 ​​​​​​​​priorities.forEachIndexed { ​​​​​​​​​​​​index, value -> q.offer(Pair(index, value)) ​​​​​​​​​​​​max_val = if (value > max_val) {value} else {max_val} ​​​​​​​​} ​​​​​​​​while (!q.isEmpty()) { ​​​​​​​​​​​​var first = q.poll() ​​​​​​​​​​​​if (first!!.second == max_val) { ​​​​​​​​​​​​​​​​answer++ ​​​​​​​​​​​​​​​​if (first.first == location) return answer ​​​​​​​​​​​​​​​​max_val = 0 ​​​​​​​​​​​​​​​​q.forEachIndexed { ​​​​​​​​​​​​​​​​​​​​i, (key, value) -> max_val = if (value > max_val) {value} else {max_val} ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​} else q.offer(first) ​​​​​​​​} ​​​​​​​​return 0 ​​​​} }

     

sangilyoon.dev@gmail.com