백준 1966번 프린터큐 (LinkedList이용방법)

byeol·2023년 2월 11일

내가 구현한 복잡하고 이상한 코드 심지어 예제는 맞으나
정답은 틀리게 나온다.
오래 고민했지만 잘못된 접근인거 같아 방법을 찾아보고
힌트를 얻어 다시 풀어보고자 한다.

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


class Main{
    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = null;


        int T = Integer.parseInt(br.readLine());


        for(int i=0; i<T;i++){
            int result =0;

            st = new StringTokenizer(br.readLine()," ");
            int[] prior = new int[10];
            ArrayList<Integer> print = new ArrayList<>();
            int wait = Integer.parseInt(st.nextToken());
            int target_index = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(br.readLine()," ");
            for(int j=0;j<wait;j++){
                int Q = Integer.parseInt(st.nextToken());
                prior[Q]+=1;
                print.add(Q);
            }

           boolean break_tag =false;

            for(int j=9;j>=1;j--){
                while(prior[j]>0){
                    if(print.get(0)==j){
                        print.remove(0);
                        result++;
                        target_index--;
                        prior[j]--;
                        if(target_index==-1) {
                            break_tag = true;
                            break;
                        }
                    } else {
                        print.add(print.get(0));
                        print.remove(0);
                        target_index--;
                        if(target_index==-1) target_index = print.size()-1;
                    }
                    if(break_tag==true) break;


                }//if

            }//for
            bw.write(Integer.toString(result)+"\n");

        }
        bw.flush();
        bw.close();
        br.close();

    }

}

아래의 방법으로 성공
단순한 문제인데 코드가 나름 복잡하다.

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

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = null;
        int T = Integer.parseInt(br.readLine());

        while(T-- >0){
            st=new StringTokenizer(br.readLine()," ");
            int M = Integer.parseInt(st.nextToken());
            int N = Integer.parseInt(st.nextToken());

            LinkedList<int[]> q = new LinkedList<>();

            st = new StringTokenizer(br.readLine()," ");
            for(int i=0;i<M;i++){
                q.offer(new int[]{i,Integer.parseInt(st.nextToken())});
            }

            int count=0;
            while(!q.isEmpty()) {
                int[] front = q.poll();
                boolean tag = false;
                for (int i = 0; i < q.size(); i++) {
                    if (front[1] < q.get(i)[1]) {
                        q.offer(front);
                        for (int j = 0; j < i; j++) {
                            q.offer(q.poll());
                        }
                        tag = true;
                        break;
                    }
                }
                if (tag == true) continue;
                if(tag==false) {
                    count++;
                    if (front[0] == N) {
                        bw.write(Integer.toString(count)+"\n");
                        break;
                    }
                }

               }

            }
        bw.flush();
        bw.close();
        br.close();
        }

}

profile
꾸준하게 Ready, Set, Go!

0개의 댓글