Algorithm/BOJ(Baekjoon Online Judge)

[백준 - 1966번] 프린터 큐 - Java //Wello Horld//

koucop 2019. 12. 31. 11:57

이번에는 BOJ의 1966번 문제 "프린터 큐" 를 풀어보도록 하자

 

기존 프린터기기는 여러개의 문서가 쌓인다면 Queue 에 쌓여서 FIFO에 따라 인쇄가 되는데, 이번 문제에서는 Queue의 가장 앞에 있는 문서의 중요도를 확인하고, 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 현재 문서를 Queue의 가장 뒤에 재배치하고, 그렇지 않다면 바로 인쇄를 하는 프로그램을 만들면 되는 문제이다.

입력으로 test case의 수가 주어지고, 각 test case만큼 문서의 수 N과 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue의 어떤위치에 있는지 알려주는 M이 주어진다.

출력으로 각 test case에 대해서 M번째 문서가 몇번째로 인쇄되는지 출력하면 되는 문제이다.

성공한 코드는 아래와 같다.

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

public class sample {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
            ArrayList<Ele> list = new ArrayList<Ele>();
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                list.add(new Ele(j, Integer.parseInt(st.nextToken())));
            }
            int cnt = 1;
            base:
            while (!list.isEmpty()) {
                Ele e = list.get(0);
                for(int j = 1; j < list.size(); j++){
                    if(e.val < list.get(j).val){
                        list.remove(0);
                        list.add(e);
                        continue base;
                    }
                }
                if(e.pos == M){
                    break;
                }
                list.remove(0);
                cnt++;
            }
            bw.write(cnt + "\n");
        }

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

    static class Ele {
        int pos, val;

        public Ele(int pos, int val) {
            this.pos = pos;
            this.val = val;
        }
    }
}

 

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

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를

www.acmicpc.net

 

혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요.