본문 바로가기
Problem Solving/BOJ

[BOJ][Python]백준 1966 풀이

by NoiB 2022. 2. 19.
반응형

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

import sys
ssr = sys.stdin.readline

c = int(ssr())
for i in range(c):
    n,m = map(int, ssr().split())#문서의 갯수 n, 궁금한게 왼쪽 몇 번째에 있는지 m
    imp = list(map(int, ssr().split()))#n개 문서의 중요도가 차례대로 주어짐
    cnt = 0
    for j in range(n):
        idx = imp.index(max(imp))
        if idx <= m:
            _=1
        else:
            m += len(imp)
        imp.extend(imp[0:idx])
        del imp[0:idx]
        m -= idx
        imp.pop(0)
        m -= 1
        cnt += 1#원소가 아니라 원래 원소의 위치를
        if m == -1:
            print(cnt)
            break

상당히 지저분하게 짰습니다만... 간단히 설명해보자면 가장 중요한 문서부터 출력해야한다는 조건과 함께 그 앞의 문서들은 다시 순서대로 뒤에 배치한다는 부분이 있습니다. 이 때 우리가 언제 출력되는지 알고싶은 문서가 하필 중요도가 별로 높지 않아서 뒤로 계속 밀리는 경우가 있겠죠. 리스트를 이용해서 문제를 푼다면 계속해서 인덱스가 변경이 되는 상황이 일어날겁니다. 그걸 해결하기 위해서 m에 더하고 빼고를 반복하면서 인덱스가 추적되는 것처럼 이용한 것입니다. 다 풀고 보니 딕셔너리를 쓴다면 구태여 이럴 이유가 없었겠다 싶네요. 다만 개인적으로 key와 value가 둘 다 숫자가 되는 자료의 경우에 순간적으로 알아보기 힘들어서 자주 이용을 하지 않는 이유도 있습니다.

 

도움이 되셨는지 모르겠습니다만 저도 이 문제를 풀 때 이상하게 인덱스를 왔다갔다 시킬 일반적인 방법을 생각하는데 오래걸려서 좀 귀찮았습니다. 확실히 자주 안푸니까 점점 기량이 떨어지는 것 같아요.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]백준 4949 풀이  (0) 2022.02.20
[BOJ][Python]백준 2805 풀이  (0) 2022.02.19
[BOJ][Python]백준 1874 풀이  (0) 2022.02.15
[BOJ][Python]백준 1654 풀이  (0) 2022.02.15