문제 : https://programmers.co.kr/learn/courses/30/lessons/42587
class Solution {
fun solution(priorities: IntArray, location: Int): Int {
var answer = 0
val arr = ArrayList<Pair<Int,Int>>()
// 우선순위와 알파벳(0 == A, 1 == B..) 저장
for(i in priorities.indices){
arr.add(Pair(priorities[i],i))
}
// 큐가 다 빌때까지
while(arr.isNotEmpty()){
// 정렬하여 최우선순위 값 확인
val tmpArr = arr.sortedByDescending { it.first }
val maxPrior = tmpArr[0].first
// arrayList 의 첫번째 원소를 사용함으로써 큐처럼 구현
if(arr[0].first != maxPrior){
// 우선순위가 아니라면 맨뒤로 뺌
arr.add(arr[0])
}
else{
// 우선순위라면 출력하고 (answer++)
answer++
// 그 값이 찾는 값이라면 break
if(arr[0].second == location){
break
}
}
// 맨 앞의 값 제거 (pop)
arr.removeAt(0)
}
return answer
}
}
큐를 활용하여 문제를 풀었다.
arrayList를 큐처럼 사용하기 위해 첫번째 값을 계속 pop 해주었고,
pop된 값이 최우선순위가 아니라면 맨뒤에 다시 추가해줌으로써
큐가 다 비어있거나 원하는 알파벳을 찾을 때 종료되도록 하였다.
처음에는 위와 같이 계속 정렬해보아서 최대값을 찾아서 확인했었는데,
class Solution {
fun solution(priorities: IntArray, location: Int): Int {
var answer = 0
val arr = ArrayList<Pair<Int,Int>>()
// 우선순위와 알파벳(0 == A, 1 == B..) 저장
for(i in priorities.indices){
arr.add(Pair(priorities[i],i))
}
// 큐가 다 빌때까지
while(arr.isNotEmpty()){
// arrayList 의 첫번째 원소를 사용함으로써 큐처럼 구현
if(arr.any { arr[0].first < it.first }){
// 우선순위가 아니라면 맨뒤로 뺌
arr.add(arr[0])
}
else{
// 우선순위라면 출력하고 (answer++)
answer++
// 그 값이 찾는 값이라면 break
if(arr[0].second == location){
break
}
}
// 맨 앞의 값 제거 (pop)
arr.removeAt(0)
}
return answer
}
}
any를 활용하여 조건을 파악하는 것이 훨씬 효율적이기 때문에 변경해주었다.