일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Next.js
- 생활코딩
- vercel
- 30daysdowoonchallenge
- React
- 회고
- html
- UI
- 자바스크립트
- mysemester
- 운영체제
- Til
- redux
- useState
- 프로토타입
- superstarjypnation
- level1
- 프로그래머스
- javascript
- 카카오
- web
- REST_API
- 코드스테이츠
- 자료구조
- CSS
- UX
- 백준
- 큐
- 해시테이블
- 스택
- Today
- Total
데굴데굴
[파이썬] 1966번: 프린터 큐 본문
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
생각했던 것만큼 잘 풀리지 않아 아래 링크를 참고했다.
# 프린터 큐
for _ in range(int(input())):
# N = 문서의 개수, M = 문서가 Queue에 놓인 순서
N, M = map(int, input().split())
# N개 문서의 중요도
prec = list(map(int, input().split()))
# 중요도 리스트의 인덱스 관리
idx = list(range(N))
idx[M] = 'target'
# 문서가 출력될 순서
order = 0
while True:
if prec[0] == max(prec):
order += 1
if idx[0] == 'target':
print(order)
break
else:
prec.pop(0)
idx.pop(0)
else:
prec.append(prec.pop(0))
idx.append(idx.pop(0))
참고링크: https://assaeunji.github.io/python/2020-05-04-bj1966/
문서의 중요도가 주어지면 그 중요도의 인덱스를 저장하는 idx 리스트도 만들어 인덱스와 중요도 리스트를 동시에 관리한다.
중요도 리스트는 FIFO로 인해 인덱스가 계속 변화하기에 M번째에 놓여 있던 문서가 몇 번째로 출력되는지 제대로 알기 어렵기 때문이다.
M번째에 놓여 있던 문서의 순서 변화도 관리하기 위해 인덱스를 저장하는 리스트를 따로 만든다.
가장 먼저 출력되어야 할 문서는 중요도가 가장 높은 문서, 즉 중요도 리스트의 최댓값이다.
그렇기에 최댓값이 리스트의 첫 번째에 올 때까지 FIFO를 수행한다.
최댓값이 첫번째에 오면 order에 1을 더하고 M번째 문서가 아니라면 그 문서를 출력했다는 의미로 리스트에서 팝한 후 남은 원소들 중의 최댓값이 맨 앞에 오도록 FIFO를 반복적으로 수행한다.
언젠가는 가장 큰 중요도의 문서가 큐의 M번째에 놓여 있던 문서가 되는 때가 온다.
그 때에는 order를 출력하고 반복문을 종료한다.
'algorithm > 백준' 카테고리의 다른 글
[파이썬] 15829번: Hashing (0) | 2022.08.17 |
---|---|
[파이썬] 11050번: 이항 계수 1 (0) | 2022.08.07 |
[파이썬] 2164번: 카드2 (0) | 2022.08.05 |
[파이썬] 4153번: 직각삼각형 (0) | 2022.07.26 |
[파이썬] 11655번: ROT13 (0) | 2022.07.22 |