ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1966 프린터 큐(파이썬)
    백준 문제풀이 2022. 8. 28. 17:31

    import sys
    from collections import deque
    test=int(sys.stdin.readline())
    for i in range(test):
      n,m=map(int,(sys.stdin.readline().split()))
      k=deque(map(int,input().split()))
      count=0
      if(n==1):
        print(1)
      else:
        while(len(k)!=0):
          data2 = k.popleft()
          k.append(data2)
          m=m-1
          if(data2<max(k)):
            if(m<0):
              m=len(k)-1
          else:
            k.pop()
            if(m>=0):
              count+=1
            else:
                count+=1
                break
    
        print(count)

     

     

    거의다 풀었다고 생각했는데 풀지못하였다.. 테스트케이스는 통과했으나 여러가지 반례를 찾아보니 못풀었다..

    m의 인덱스를 따라가는 count변수를 두고 큰수가 나갈때마다 count는 -1 count2는 +1을 해서 count2를 출력하는 함수인데 런타임 에러가 자꾸난다.. ㅠ

     

    그래서 확인해보니 순서가 잘못되었다. 애초에 삭제를 먼저하고 인덱스를 구하면 인덱스가 그 안에서 또 변경되므로 이번에는 

    반복문 맨 처음에 맨 앞 값을 삭제하고 일단 그것을 뒤에 붙인다. 그 후에 if문을통해 방금 뒤에 붙인값이 최대값이면 리스트를 그대로 두고, 찾고싶은 값의 인덱스를 참조하는 m값이 음수 일때는 m 인덱스를 맨뒤로 보내도록 하였다.

     

    만약 뒤에 붙인값이 최대값일 경우는 맨 뒤에 값을 삭제하고, m값이 양수일때(아직 빠지지 않은경우) count값을 +하였고, m값이 음수일때(방금 빠진값이 찾으려 하는 값) count값을 +하고 반복문을 빠져나오도록 하였다.

     

     

     

     

     

     

     

     

    출처 : https://hongcoding.tistory.com/42

    댓글

Designed by Tistory.