[8/1] 1966 (프린터 큐)

이경준·2021년 8월 1일
0

코테

목록 보기
76/140
post-custom-banner

실버3 문제

내 코드

t = int(input())
for _ in range(t):

    n, m = map(int, input().split())
    arr = list(map(int, input().split()))

    alist = []

    for i in range(n):
        alist.append([arr[i], i])

    cnt = 0
    while True:

        imax = 0
        for k in alist:
            if ( k[0] > imax ):
                imax = k[0]

        if ( alist[0][0] == imax ):
            cnt += 1
            if (alist[0][1] == m):
                print(cnt)
                break

            else:
                alist.pop(0)

        else:
            alist.append(alist.pop(0))

로직

  1. 우선순위와 인덱스를 나타낸 2차원 배열을 만들었다.
  2. for문을 돌려서 (비효율적이라 다른 방법을 쓰는게 좋을듯) 최대값을 찾아내고, 최댓값이면 삭제하고 아니면 맨 뒤로 보낸다. 해당 값의 인덱스가 m이면 cnt를 출력하고 끝낸다.

효율적인 코드

t = int(input())
for _ in range(t):

    n, m = map(int, input().split())
    arr = list(map(int, input().split()))

    soon = list(range(len(arr)))

    cnt = 0
    while True:
        if ( arr[0] == max(arr) ):
            cnt += 1
            
            if ( soon[0] == m ):
                print(cnt)
                break
            else:
                arr.pop(0)
                soon.pop(0)
            
        else:
            arr.append(arr.pop(0))
            soon.append(soon.pop(0))

피드백

  • 나는 우선순위와 인덱스를 2차원 리스트로 합쳐서 나타냈는데, 다른 사람들은 각각 하나씩 1차원 리스트로 나누어 표현햇다.
profile
The Show Must Go On
post-custom-banner

0개의 댓글