-
[프로그래머스] 프린터 (Kotlin)문제풀이/프로그래머스 2021. 7. 2. 23:10
문제 링크
두 가지 방법으로 풀었습니다.
첫 번째 방법은 ArrayList를 이용한 큐의 구현,
두 번째 방법은 java.util.ArrayDeque를 import하여 사용.
로직은 동일하며, 다른 사람의 풀이에서도 크게 획기적인 방법은 찾지 못했습니다.
퍼포먼스는 케이스마다 조금씩 다르나, 평균적으로 아주 약간 ArrayDeque를 이용한 두 번째 방법이 더 좋게 나왔습니다.
내 풀이(1)
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)
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 } }