본문 바로가기
Java/알고리즘

[Java] 백준-1966 프린터 큐 (ArrayList를 통한 풀이방식)

by WaterPunch 2022. 10. 10.

 

ArrayList를 통해 Queue를 구현해서 풀어보았다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class PrinterQueue {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 테스트 케이스 값 입력
        int testcase = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();

        StringTokenizer st;
        
        //테스트케이스 횟수만큼 실행
        for(int i=0; i<testcase; i++) {
            // 6 0
            st = new StringTokenizer(br.readLine(), " ");
            
            // 6
            int size = Integer.parseInt(st.nextToken());
            // 0
            int findIndex = Integer.parseInt(st.nextToken());

            ArrayList<Integer[]> list = new ArrayList<Integer[]>();
            st = new StringTokenizer(br.readLine(), " ");

            for(int j=0; j<size; j++) {
                Integer[] arr = new Integer[2];
                // index값 저장
                arr[0] = j;
                // value값 저장
                arr[1] = Integer.parseInt(st.nextToken());
                list.add(arr);
            }
            int count = 0;

            while(true) {
                int maxValue = 0;
                int maxIndex = -1;
                // maxValue 를 통해 값을 비교하고 maxIndex 를 찾는다
                // 만약 남은 값들이 다 똑같다면 ( 1 1 1 1 1 )
                // maxIndex = 0일 것이다.
                for(int j =0; j<list.size(); j++) {
                    if(maxValue < list.get(j)[1]) {
                        maxValue = list.get(j)[1];
                        maxIndex = j;
                    }
                }
                
                // maxIndex 앞의 값들은 제거하고 다시 맨 뒤로 넣어준다
                // maxIndex = 0 일 경우 미실행 
                for(int j=0; j<maxIndex; j++) {
                    list.add(list.remove(0));
                }

                // list의 맨 앞 index가 찾고자하는 index가 아니라면
                // count++ 해주고 제거
                if(list.get(0)[0] != findIndex) {
                    count++;
                    list.remove(0);
                }
                // list의 맨 앞 index가 찾고자하는 index가 맞다면
                // count++ 해주고, StringBuilder에 추가
                else {
                    count++;
                    sb.append(count).append("\n");
                    break;
                }
            }
        }
        br.close();
        System.out.println(sb);
    }
}
반응형

댓글