Skip to content
This repository has been archived by the owner on Mar 18, 2020. It is now read-only.

Latest commit

 

History

History
40 lines (31 loc) · 2.26 KB

2019-02-15-TIL.md

File metadata and controls

40 lines (31 loc) · 2.26 KB
layout title slug tags
post
2019-02-15-TIL
190215-TIL
TIL

백준 1966번 프린터 큐 문제를 한참 걸려서 풀었다. 그것도 구글에 다른 분들의 해답을 검색해서 이것저것 찾아보다가 겨우겨우 어느 한 분의 간결한 코드를 보고 깨달음을 얻고서 작성할 수 있었다. 문제의 핵심은 간단한데, 정작 어떻게 구현해야할지 갈피를 못잡아서 시간을 허비했다. 문제에서 준 규칙에 따라 각 문서들이 프린트되도록 충실히 구현하고, 특정 문서의 위치와 인쇄 순서만 잘 기록하면 되는 것이었다.

{% raw %}

testNum = int(input())
    for i in range(testNum): # 총 테스트케이스 수 만큼 각 테스트케이스 건에 대해 for문 실행
        totalNum, indexGiven = map(int,input().split()) # 총 문서의 개수, 인쇄순서가 궁금한 특정 문서의 차례
        numList = list(map(int,input().split())) # 인쇄하고자 하는 문서의 중요도 나열을 받음 
        positionList = [0 for i in range(totalNum)] # 총 문서의 개수만큼 0이 들어있는 위치 리스트를 만듦
        positionList[indexGiven] = 1 # 인쇄순서가 궁금한 특정 문서의 위치만 1로 표시 
        count = 0 # 인쇄된 문서의 수. 

        while True:
            if numList[0] == max(numList): # 맨 처음 문서의 중요도가 문서들 중 가장 높다면
                count += 1 # 인쇄되니까 count + 1
                if positionList[0] == 1: # 그런데 특정 문서가 맨 처음 문서라면 
                    print(count) # 답을 구했으므로 바로 count 출력
                    break
                else: # 그렇지 않다면 문서 리스트에서도 제거, 위치 리스트에서도 제거
                    numList.pop(0)
                    positionList.pop(0)
            else: # 맨 처음 문서보다 중요도가 높은 문서가 1개라도 있다면 
                numList.append(numList.pop(0)) # 맨 처음 문서를 가장 맨 뒤쪽으로 보낸다
                positionList.append(positionList.pop(0)) # 위치 리스트도 마찬가지로 처리해준다

{% endraw %}