[백준1966] 프린터 큐 [JAVA]

Boknami·2023년 10월 17일
0

백준문제풀이

목록 보기
44/45

🕐풀이시간 : 1시간 반

📋 회고

실버3 문제로 그렇게 어려운 문제는 아니였다.
그런데 처음에 문제를 잘못 이해해서 이상한 코드를 작성하는 바람에 시간을 30분 정도 낭비했다.

한 번 읽고 멋대로 이해했다 생각하지말고 한 번 더 읽자! 그게 시간적으로 훨씬 이득임!

문제를 제대로 이해하고도 제대로 구현해내지를 못했다. 그래도 답지를 보고 코딩하지 않고 풀어서 뿌듯하긴한데 시뮬,구현 문제에 여전히 약하다.

아무튼 풀이를 하려고 했던 방향은 <중요도, 찾고 있는 값인지> 를 저장하는 클래스를 만들고, while문을 통해서 최상인 중요도인 문서만 출력하면서계속 돌면서 혹시나 이번에 뽑은 게 찾고 있는 값인지 확인하려고 했다!

🚨 실수

  1. 반복문을 que.size()로 잡아두었다..반복은 true로 계속해야한다. 우리가 원하는 값을 찾을 때까지!!

  2. 값을 처음에 확인할 때 get을 통해 확인을 했다. 이 부분은 정답과는 그렇게 중요한 건 아닌데 처음부터 remove를 하고 값을 변수로 받아두고 만약 최상 중요도가 아니면 빋아둔 변수를 다시 add하면 되서 더 좋은 코드가 된다!

이 외에도 자잘하게 여러 곳을 많이 고쳤는데 더 생각이 안난다.


💻 코드

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

public class Main {
    static class Document{
        int prior;
        int isFind;
        public Document(int a, int b){
            this.prior =  a;
            this.isFind = b;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        for(int i = 0 ; i < T; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int doc = Integer.parseInt(st.nextToken());
            int target = Integer.parseInt(st.nextToken());
            List<Document> ary = new ArrayList<>();

            st = new StringTokenizer(br.readLine());
            for(int j = 0 ; j < doc; j++){
                int value = Integer.parseInt(st.nextToken());
                if (j == target)
                    ary.add(new Document(value, 1));
                else
                    ary.add(new Document(value, 0));
            }

            int cnt = 0;
            while(true){
                Document curDoc = ary.remove(0);

                int max= 0;
                for(int m = 0 ; m < ary.size();m++){
                    max = Math.max(max, ary.get(m).prior);
                }

                if(max <= curDoc.prior) {
                    cnt++;
                    if(curDoc.isFind == 1){
                        System.out.println(cnt);
                        break;
                    }
                }
                else if(max != curDoc.prior)
                    ary.add(curDoc);
            }
        }
    }
}

0개의 댓글