티스토리 뷰
728x90
https://www.acmicpc.net/problem/1966
- 해설 :
프린터기가 다음과 같은 조건으로 동작한다.
- 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다.
- 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다.
예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, 다음으로 D를 인쇄하고 A, B를 인쇄하게 된다.
프린터의 큐에 들어있는 문서와 문서의 중요도가 주어질 때, 문서가 몇 번째로 출력되는지 찾는 문제이다.
- 풀이 :
큐를 사용하여 현재 출력물이 중요도 1순위가 아닐 경우 맨 뒤로 보내는 작업을 반복하여 주어진 조건에 맞게 구현하면 된다.
- 소스코드 :
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
32
33
34
35
36
37
38
39
40
41
42
|
import sys
input = sys.stdin.readline
t = int(input())
for i in range(t):ㅁimport sys
from collections import deque
input = sys.stdin.readline
if __name__ == "__main__":
for _ in range(int(input())):
N,M = map(int,input().split())
weight = deque(list(map(int,input().split())))
cnt = 0
check = weight.copy()
for i in range(N):
weight[i] = [weight[i],i]
while weight:
x = weight[0]
if x[0] != max(check):
weight.append(x)
weight.popleft()
check.append(check.popleft())
else:
cnt += 1
weight.popleft()
check.popleft()
if x[1] == M:
print(cnt)
break
n = int(input())
s = [0 for i in range(n + 1)]
for j in range(n):
a, b = map(int, input().split())
s[a] = b
min_n = s[1]
cnt = 0
for k in range(2, n + 1):
if s[k] > min_n:
cnt += 1
else:
min_n = s[k]
print(n - cnt)
|
cs |
320x100
'Algorithm > Data Structure' 카테고리의 다른 글
(Python) - BOJ(2164번) : 카드 2 (0) | 2022.01.30 |
---|---|
(Python) - BOJ(1992번) : 쿼드 트리 (0) | 2022.01.30 |
(Python) - BOJ(1927번) : 최소 힙 (0) | 2022.01.28 |
(Python) - BOJ(1874번) : 스택 수열 (0) | 2022.01.28 |
(Python) - BOJ(1662번) : 압축 (0) | 2022.01.27 |
댓글
© 2022 WonSeok, All rights reserved