
문제 해석
- 문제를 해석하면, 가장 첫째 줄에는 테스트케이스의 수(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; 
    }
}
- 개인적으로 너무 어려웠다. 
 
- 문제는 이해했지만, 코드로 전환하는 게 생각이 나질 않아서 참고 블로그 참고 했다...
 
- 그래서 이 문제는 이해는 했지만 직접 코드를 생각해서 치지 못한 문제이다...
 
- 아무튼, 코드 설명은 주석으로 작성해두었다.
 
결과

느낀 점
- 문제 해석에 시간을 코딩할 때 보다 더 쓴 것 같다. (내 문해력이 부족하다는 것을 느꼈다.)
 
- 코드를 이해했지만 처음부터 직접 작성하지 못해서 다시 리뷰해야할 문제...(하...)