코딩 테스트 연습 - 프린터

다용도리모콘·2020년 6월 28일
0

CodingTest

목록 보기
19/34

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. 회고

문서의 순서대로 인쇄하는 것은 쉬웠는데 특정 문서가 몇 번째에 인쇄되는지를 구하는 데서
조금 헤맸다. 같은 중요도의 문서가 여러 장일 경우 문서의 중요도 만으로 그 문서가
내가 원하는 문서인지를 알 수 없기 때문이다. 루프가 돌 때마다 위치 값을 이동시키는
것으로 해결했다.

0개의 댓글