layout | title | slug | tags | |
---|---|---|---|---|
post |
2019-02-15-TIL |
190215-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 %}