자료구조 및 알고리즘/백준

[python] 1966. 프린터 큐

viamemine 2023. 2. 2. 14:52
728x90
반응형
  • 문제

 

  • 올바른 풀이
import sys
T = int(input())

for i in range(T):
    N, M = map(int, sys.stdin.readline().split())
    queue = list(sys.stdin.readline().split())
    idx = list(range(len(queue))) # 인덱스 처리
    idx[M] = 'target'

    order = 0 # 순서

    while True:
        if queue[0] == max(queue): # 첫번째 값이 가장 크면 order+1
            order += 1

            if idx[0] == 'target': # 첫번쨰 값이 target이면
                print(order) # order 출력
                break
            else: # 첫번째 값이 target이 아니면
                queue.pop(0)
                idx.pop(0)
        else: # 첫번재 값이 가장 큰 값이 아니면
            queue.append(queue.pop(0))
            idx.append(idx.pop(0))

 

원래 내가 풀고자 했던 방법은 문제에 나와 있는 예제처럼 입력 받은 리스트를 A, B, C  ... 형태로 바꾸어

같은 숫자도 target인지 아닌지 구분할 수 있는 것이다.

하지만, 이보다 더 효율적인 방법으로 문제를 해결한 블로그의 방법을 공유한다.

 

주어진 문제의 입력을 받고, 우리가 원하는 index의 값을 target으로 치환한다.

그리고 while문을 돌면서 첫번째 값이 가장 크도록 pop과 append를 반복한다.

첫번째 값이 가장 크도록 list가 구성되었다면,
우리가 찾는 target 값이 맨 처음에 올 수 있도록 pop하며 order+1을 해준다.

* 이 부분이 잘 이해되지 않는다면 하단의 그림 설명을 참고하면, 이해가 쉽게 될 것이다.

이렇게 target의 출력 순서(order)를 출력한다.

 

 

 

* 이 블로그를 참고하였습니다.

https://assaeunji.github.io/python/2020-05-04-bj1966/

728x90

'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글

[python] 9184. 신나는 함수 실행  (0) 2023.02.17
[python] 1004. 어린왕자  (0) 2023.02.12
[python] 4949. 균형잡힌 세상  (0) 2023.01.30
[python] 2164. 카드2  (0) 2023.01.28
[python] 10866. 덱  (0) 2023.01.27