본문 바로가기

백준 알고리즘 문제풀이

[Python] 1966번: 프린터 큐

"""
3  # 테스트 케이스 개수

<입력1>
1 0    #(문서의개수) / (알고싶은 문서의 배치 위치 (가장 왼쪽을 0 이라고 가정한다)
5      #문서의 중요도
<출력1>
1     #하나만 존재 하므로

<입력2>
4 2     # 문서의 개수 / 알고싶은 문서의 배치 위치(왼쪽에서 부터 3번째 칸, 인덱스 번호 처럼)
1 2 3 4     #문서의 중요도 (내가 알고싶은 문서의 중요도는 3이다)
<출력2>
2

<입력3>
6 0     # 문서의 개수 / 알고싶은 문서의 배치 위치 (가장 왼쪽에 있는 칸을 의미한다.)
1 1 9 1 1 1
<출력3>
5

같은 문자열일때의 경우는 따로 생각해봐야 된다.
11(2)233일때 해달 문자열이 나오는 경우는

(0)일떄 5
(1)일때 6
(3)일때 2
(4)일떄 3
(5)일때 4

"""
"""
insert(x)를 활용해서 해당 문자열이 무엇인지 알아낸다
해당 문자열을 '1a'로 바꾼뒤
"""

import sys

T = int(sys.stdin.readline())

for _ in range(T):
    N , M = map(int, sys.stdin.readline().split())
    Table = list(map(int , sys.stdin.readline().split()))
    My_TT = list(range(len(Table)))      #인덱스 비교용 배열
    My_TT[M] ='1'    #내가 고른 카드의 위치인덱스를 저장하는 배열에서 해당 위치를 '1' 로 바꿔 준다. ( 0,1,2, '1',4 ,5 ..) 이런식으로 담겨 있음

    counter = 0
    while (True):
        # 비교를 시작 하자
        if Table[0]==max(Table):
            counter+=1 # 일단 pop 조건을 만족하면 실행을 한다.
            if My_TT[0]=='1':     #만약 해당 인덱스가 내가 찾는 위치에 있는 수이다 하면 출력해주고 무한 반복문을 중지 한다.
                print(counter)
                break
            else:     # MY_TT랑 Table랑 동시에 돌려보는 반복문이라고 생각을 하면 편하게 출력이 가능한다.
                Table.pop(0)
                My_TT.pop(0)
        else:    #첫번쨰 오는 애가 가장 큰애가 아닌 경우 다시 뒤로 되돌려 주어야 하기 때문이다.
            Table.append(Table.pop(0))
            My_TT.append(My_TT.pop(0))

<알고 넘어 가야 하는 점>

pop(0)은 0번 인덱스에 위치한 값을 출력한다.

실제 자료가 담긴 테이블과 인덱스 번호를 담은 테이블을 동시에 돌리면서 비교를 한다고 생각 하면 편하다.

'백준 알고리즘 문제풀이' 카테고리의 다른 글

[Python] 2166번: 주사위 쌓기  (0) 2023.01.14
[Python] 2302번: 극장 좌석  (0) 2023.01.14
[Python] 1920번: 수 찾기  (0) 2023.01.01
[Python] 1978번: 소수 찾기  (0) 2023.01.01
[Python] 2164번: 카드2  (0) 2023.01.01