백준 1966번 바로가기

나의 풀이

for _ in range(int(input())):
  n, i = map(int, input().split())
  queue = list(map(int, input().split()))
  count = 0
  while queue:
    i -= 1
    if max(queue) == (out:=queue.pop(0)):
      count += 1
      if i < 0:
        print(count)
        break
    else:
      queue.append(out)
      if i < 0:
        i = len(queue) -1

고수의 풀이

for _ in range(int(input())):
    n,m=map(int,input().split())
    t=list(map(int,input().split()))
    a=sorted(t, reverse=True);j=0
    i=0
    while True:
        if a[j] == t[i]:
            j+=1
            if i == m:
                print(j)
                break
        i=(i+1)%n

출처

CODE REVIEW

  1. 관심있는 대상이 out되는지 아닌지 판단하는 과정이 은근 까다로운 문제였다. out될 때까지 count를 하나씩 늘려나가는 방식이었다.
  2. 고수의 풀이를 보면, 애초에 중요도를 내림차순으로 정렬하고, 기존의 중요도 리스트와 비교하면서 count을 세어나갔다.