문제 해석
- 문제를 해석하면, 가장 첫째 줄에는 테스트케이스의 수(T)를 입력받는다.
- 테스트케이스의 수(T)를 입력받았다면, 각각의 테스트케이스를 입력받는데, 테스트케이스 한 개마다 2줄을 입력받는다.
- 일단, 테스트 케이스의 첫째 줄에는 문서의 개수(N)과 몇번째로 인쇄되는지 궁금한 문서가 몇번째 순서(M)인지 입력받는다.
- 첫째 줄을 모두 입력 받고 나면, 각각의 문서의 중요도인가 차례대로 주어진다.
- 문서의 중요도는 1이상이고 9 이하이다. (즉, 중요도가 같은 문서는 여러 개 존재할 수 있다.)
- 문서의 중요도가 같은 경우는 맨 앞에 있는 것을 먼저 뺀다. (여기서 주의 해야할 점이 있는데, 중요도가 현재 맨앞에 있는 요소보다 큰 것이 있으면 맨 뒤로 보낸다는 것! 즉, 순서는 바뀔 수 있다는 것이다.)
- 말로만 설명하면, 어려운데 그림을 설명하면 아래와 같다.
코드
import java.io.*;
import java.util.*;
public class Main {
static LinkedList<int[]> queue;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
while(T --> 0){
queue = new LinkedList<>();
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
queue.add(new int[]{i, Integer.parseInt(st.nextToken())});
}
sb.append(solution(M)).append("\n");
}
br.close();
System.out.println(sb);
}
static int solution(int M){
int findIt = 0;
while(!queue.isEmpty()){
int[] first = queue.poll();
boolean isMax = true;
for(int i = 0; i < queue.size(); i++){
if(first[1] < queue.get(i)[1]){
queue.offer(first);
for(int j = 0; j < i; j++){
queue.offer(queue.poll());
}
isMax = false;
break;
}
}
if(isMax == false){
continue;
}
findIt++;
if(first[0] == M){
break;
}
}
return findIt;
}
}
- 개인적으로 너무 어려웠다.
- 문제는 이해했지만, 코드로 전환하는 게 생각이 나질 않아서 참고 블로그 참고 했다...
- 그래서 이 문제는 이해는 했지만 직접 코드를 생각해서 치지 못한 문제이다...
- 아무튼, 코드 설명은 주석으로 작성해두었다.
결과
느낀 점
- 문제 해석에 시간을 코딩할 때 보다 더 쓴 것 같다. (내 문해력이 부족하다는 것을 느꼈다.)
- 코드를 이해했지만 처음부터 직접 작성하지 못해서 다시 리뷰해야할 문제...(하...)