[Level 2] 프로그래머스 프린터 코틀린 풀이

[Level 2] 프로그래머스 프린터 코틀린 풀이

[Level 2] 프로그래머스 프린터 코틀린 풀이


문제 소개

이번에 풀어볼 문제는 프린터 입니다
problem

각 문서에 중요도가 붙어있고 리스트에 넣어져있는데, 중요도가 제일 높거나 같으면 출력 아니라면 맨 뒤로 보내는것을 반복하면서 작동합니다.


문제풀이

제일 먼저

1
2
3
var arr = priorities.mapIndexed { index, value ->
Pair(value, index == location)
}

을 통해서 입력받은 중요도 리스트에서 index == location를 통해서 내가 뽑고 싶은 문서만 true를 달아줍니다.

그 다음 while을 이용해서 리스트가 빌 때 까지 반복을 돌며

1
otherArr.any { it.first > tmp.first }

을 통해서 모든 리스트중에서 내가 제일 큰지 확인합니다.

  1. 크지 않다면 앞에서 하나를 대기목록의 가장 마지막에 넣고
  2. 크다면 정답을 1늘린다

다시 루프를 돌면서 위 과정을 반복하면서 내가 뽑고싶은 문서를 찾습니다.

내가 뽑고 싶은 문제가 나오면 break를 걸고 정답을 출력합니다.


정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
fun solution(priorities: IntArray, location: Int): Int {
var answer = 1
var arr = priorities.mapIndexed { index, value ->
Pair(value, index == location)
}

loop@ while (arr.isNotEmpty()) {
val tmp = arr[0]
val otherArr = arr.subList(1, arr.size)

arr = when {
otherArr.any { it.first > tmp.first } -> otherArr + tmp
tmp.second -> break@loop
else -> {
answer++
otherArr
}
}
}

return answer
}
}

문제의 핵심은 제시한대로 코드를 짜서 직접 프린터 로직을 따라가는 구현이었던것 같습니다

점점 문제가 어려워지는게 느껴집니다.
궁금한점이 있으면 댓글로 남겨주세요 :)


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

댓글