백준 1966번 프린터 큐(java)

마뇽미뇽·2024년 7월 15일
0

알고리즘 문제풀이

목록 보기
79/165

1.문제

https://www.acmicpc.net/problem/1966

2.풀이

나름대로 주석을 달면서 풀어봤지만 너무 어려워서 https://st-lab.tistory.com/201 님을 참고했다.
단순하게 큐를 인덱스와 중요도 각각 담기 위해 2개를 만들려고 생각했는데 어떻게 구현해야할지에 대해 시간이 오래 걸렸던 것 같다.

3.코드

package com.example.baekjoon;

import java.io.*;
import java.util.*;

public class Main {
    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){    //  테스트 케이스 갯수만큼 반복
            st = new StringTokenizer(br.readLine());

            int n = Integer.parseInt(st.nextToken());   //  문서 갯수
            int m = Integer.parseInt(st.nextToken());   //  몇번째에 놓을지

            LinkedList<int []> q = new LinkedList<>();  //  인덱스 값을 사용하기 위해 배열을 사용

            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < n; i++) {
                q.add(new int[]{i, Integer.parseInt(st.nextToken())});  //  중요도
            }

            int cnt = 0;
            while (!q.isEmpty()) {  //  한 테스트 케이스 확인

                int temp[] = q.poll();
                boolean isMax = true;
                // 최대값 초기값 설정

                for (int i = 0; i < q.size(); i++) {
                    if (temp[1] < q.get(i)[1]) {
                        //  현재 max값보다 큰 값이면 현재값은 q에 추가
                        q.add(temp);
                        for (int j = 0; j < i; j++) {
                            q.add(q.poll());    //  최대값 찾기
                        }

                        isMax = false;  //  최대값일때 정지
                        break;
                    }
                }

                if (isMax == false) {
                    continue;
                }

                cnt++;
                if (temp[0] == m) { //  인덱스 값과 중요도가 같다면 정지
                    break;
                }
            }

            sb.append(cnt).append("\n");
        }

        System.out.println(sb);
    }
}
profile
Que sera, sera

0개의 댓글