Repository navigation
Expand file tree
/
Copy pathBOJ_1966.java
More file actions
70 lines (52 loc) · 2.12 KB
/
Copy pathBOJ_1966.java
File metadata and controls
70 lines (52 loc) · 2.12 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package baekjoon.silver;
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ_1966 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int TEST_CASE = Integer.parseInt(br.readLine());
for (int i = 0; i < TEST_CASE; i++) {
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 문서의 개수
int M = Integer.parseInt(st.nextToken()); // 찾고 싶은 문서의 인덱스
Queue<Integer> q = new LinkedList<>();
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) {
q.add(Integer.parseInt(st.nextToken()));
}
int count = 0; // 출력 카운트
int needToPrinted = 0; // 최대 중요도
boolean flag = false; // 목표 문서의 출력여부
while(true) {
if(flag)
break;
needToPrinted = q.stream().max(Integer::compareTo).get();
// 맨 앞이 최대중요도인 경우 -> 출력(count++)
if(q.peek() == needToPrinted) {
count++;
q.poll();
if(M == 0) { // 목표 대상인 경우
flag = true;
}
else { // 아닌 경우
M--;
}
}
else { // 맨 앞이 최대 중요도가 아닌경우
do { // 최대 중요도까지 반복해가며 offer(q.poll()) + 목표 인덱스의 값 조정(M+-)
q.offer(q.poll());
if(M == 0) {
M = q.size() - 1;
}
else
M--;
} while(q.peek() != needToPrinted);
}
}
System.out.println(count);
}
}
}