01. 이해
인쇄목록에 있는 문서를 중요도 순으로 인쇄. 특정 위치의 문서가 몇번째로 인쇄
돼었는지를 반환.
02. 계획
문서 목록을 큐에 넣는다. 맨 앞의 문서를 꺼낸 뒤 남은 문서 중 꺼낸 문서보다 중요도가
높은 문서가 있을 경우 꺼낸 문서를 맨 뒤로 넣고 없을 경우 인쇄 한다.
인쇄 순서를 더한다. 만약 인쇄된 문서가 인쇄 순서를 알고 싶었던 문서라면 인쇄 순서를
반환한다. 인쇄 순서를 알고 싶었던 문서가 아니라면 위의 작업을 계속 한다.
03. 실행
fun solution(priorities: IntArray, location: Int): Int {
val progressQueue: Queue<Int> = LinkedList<Int>(priorities.toList())
var count = 0
var currentTargetPosition = location
var max = progressQueue.max()
while (progressQueue.isNotEmpty()) {
val currentDoc = progressQueue.poll()
if (max == currentDoc!!) {
count += 1
if (currentTargetPosition == 0) {
break
} else {
currentTargetPosition -= 1
}
max = progressQueue.max()
} else {
progressQueue.add(currentDoc)
if (currentTargetPosition == 0) {
currentTargetPosition = progressQueue.size - 1
} else {
currentTargetPosition -= 1
}
}
}
return count
}
04. 회고
문서의 순서대로 인쇄하는 것은 쉬웠는데 특정 문서가 몇 번째에 인쇄되는지를 구하는 데서
조금 헤맸다. 같은 중요도의 문서가 여러 장일 경우 문서의 중요도 만으로 그 문서가
내가 원하는 문서인지를 알 수 없기 때문이다. 루프가 돌 때마다 위치 값을 이동시키는
것으로 해결했다.