문제 : https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
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를 활용하여 조건을 파악하는 것이 훨씬 효율적이기 때문에 변경해주었다.
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.