https://www.acmicpc.net/problem/1966
구현
자료 구조
시뮬레이션
큐
우선순위 큐를 이용하여 구현해주면 되는데 몇가지만 주의하면 잘 풀 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Main {
public int solution(int[] n, int m) {
int answer = 1;
int start = 0;
int[] visited = new int[n.length];
PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
for (int x : n) {
queue.offer(x);
}
for (int i = 0; i < n.length; i++) {
if (!queue.isEmpty() && queue.peek() == n[i]) {
start = i;
break;
}
}
while (!queue.isEmpty()) {
boolean check = false;
for (int i = start; i < n.length; i++) {
if (queue.peek() == n[i] && visited[i] == 0) {
queue.poll();
start = i;
if (i == m) {
return answer;
}
check = true;
visited[i] = 1;
break;
}
}
if (!check) {
for (int i = 0; i < n.length; i++) {
if (queue.peek() == n[i] && visited[i] == 0) {
queue.poll();
start = i;
if (i == m) {
return answer;
}
visited[i] = 1;
break;
}
}
}
answer++;
}
return answer;
}
public static void main(String[] args) throws IOException {
Main solution = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> list = new ArrayList<>();
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int[] nn = new int[x];
StringTokenizer stt = new StringTokenizer(br.readLine());
for (int j = 0; j < x; j++) {
nn[j] = Integer.parseInt(stt.nextToken());
}
list.add(solution.solution(nn, y));
}
for (int x : list) {
System.out.println(x);
}
}
}
ababa