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

byeol·2023년 2월 11일
0

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

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개의 댓글