반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

1966 프린터 큐 본문

코딩 테스트(Python)/백준, 프로그래머스

1966 프린터 큐

5_hyun 2022. 2. 23. 02:24
반응형

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

내 풀이(맞음)

from collections import deque
t = int(input())
rst = []
for i in range(t):
    ary = deque()
    n, m = map(int, input().split())
    x = input().split()
    for j in range(n):
        ary.append([])
        ary[j].append(int(x[j]))
        ary[j].append(j)
    sam = ary[m][1]#찾으려는 값의 처음 순서
    count = 1
    while(True):
        a = max(ary)[0]#현재의 최고 우선순위 값
        if a == ary[0][0] and ary[0][1] == m:
            rst.append(count)
            break
        elif a == ary[0][0] and ary[0][1] != m:
            ary.popleft()
            count += 1
        elif a == ary[0][0]:
            if max(ary)[1] == m:
                rst.append(count)
                break
            ary.popleft()
            count += 1
        else:
            tmp = ary.popleft()
            ary.append(tmp)
for i in rst:
    print(i)

t에 전체 테스트 개수를 입력한다. 그리고 ary에 덱을 만들고 n, m, x를 입력한다. 그러고 ary에 (우선 순위, 처음 위치 값)을 저장한다. 그리고 sam에 찾으려는 값의 처음 순서를 저장한다. count는 출력할때마다 하나씩 올라간다. while문에서는 a에 현재의 최고 순위 값을 넣는다. 그리고 조건문 4가지를 만든다. 첫번째 조건문은 현재 최고 우선 순위 값이 맨 처음 값과 같고 처음 순서도 m과 같으면 rst에 몇번째로 출력되었는지 넣고 break한다. 두번째 조건문은 현재 최고 우선 순위 값이 맨 처음 값과 같지만 처음 순서가 m이랑 다르면 출력을 해주고 count에 1을 추가한다. 세번째 조건문은 현재 최고 우선 순위가 맨 처음 값과 같고 현재 최고 우선 순위 값의 처음 순서가 m이랑 같으면 rst에 count 값을 추가한다. 하지만 처음 순서가 m이랑 다르면 출력을 하고 count를 올리고 다음 반복문으로 넘어간다. 마지막 조건문은 출력하지 못하는 경우이다. 그러면 맨 앞걸 삭제하고 맨 뒤로 보내준다.

반응형

'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글

1874 스택 수열  (0) 2022.02.25
1764 듣보잡  (0) 2022.02.23
10816 숫자 카드 2  (0) 2022.02.22
1158 요세푸스 문제  (0) 2022.02.19
11279 최대 힙  (0) 2022.02.14
Comments