코드

큐활용

from collections import deque

# 테스트 케이스 개수 받는 변수
t = int(input())

for _ in range(t):
    # n : 문서의 개수, m : 원하는 문서가 있는 위치
    n, m = map(int, input().split())
   
    # 중요도 받을 덱 생성
    deq = deque(map(int, input().split()))
    
    # 최종적으로 원하는 문서가 마지막으로 위치할 값을 담을 변수
    final_idx = 0
    
    while deq:
        
        # 중요도가 가장 높은 값 담을 변수
        max_ = max(deq)
        
        # 첫번째 요소를 일단 제거
        first = deq.popleft()
       
        # 요소가 하나씩 줄 때마다 원하는 위치값도 1씩 작아짐
        m -= 1
        
        # 첫번째 요소와 가장 높은 중요도와 같다면 원하는 문서의 마지막 위치값 +1
        if max_ == first:
            final_idx += 1
            
            # m이 음수 => 원하는 문서의 위치값에 도달
            if m < 0:
                print(final_idx)
                break
        else:
            deq.append(first)
            if m < 0:
                m = len(deq) - 1        

리스트 활용

t = int(input())

for _ in range(t):
    n, m = map(int, input().split())
    
    # 중요도를 담을 리스트
    docu_p_list = list(map(int, input().split()))
    
    # 원하는 문서의 현재 위치를 담을 리스트
    docu_p_idx = [0 for _ in range(n)]
    
    # m번째 요소의 값만 1로 변환
    docu_p_idx[m] = 1
    
    # 최종적으로 출력할 값
    final_idx = 0
    
    while True:
        
        # 맨 처음 요소와 가장 높은 중요도가 일치하지 않는 경우
        if docu_p_list[0] != max(docu_p_list):
            
            # 앞에서 지우고 뒤로 보낸다
            docu_p_list.append(docu_p_list[0])
            docu_p_idx.append(docu_p_idx[0])
            docu_p_list.pop(0)
            docu_p_idx.pop(0)
        
        # 맨 처음 요소가 가장 높은 중요도인 경우
        else:
            final_idx += 1
            
            # 1이 아니라면 원하는 문서가 아니니까 리스트에서 삭제
            if docu_p_idx[0] != 1:
                docu_p_list.pop(0)
                docu_p_idx.pop(0)
            else:
                print(final_idx)
                break           

문제 해설

참고 블로그

원하는 요소의 위치값에 대한 코드를 작성하는 것이 처음에 접근하기 어려웠다. 또한 deque를 활용할 때 중요도가 가장 높은 값을 담는 변수를 선언하는 것을 첫번째 요소를 제거하는 것보다 먼저 시행해줘야만 에러가 발생하지 않는데 이 부분을 계속 놓쳐서 시간을 상당히 많이 낭비하였다…ㅠㅠ

댓글남기기