-
[백준 - 1966번] 프린터 큐 - Java //Wello Horld//Algorithm/BOJ(Baekjoon Online Judge) 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
혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요.
'Algorithm > BOJ(Baekjoon Online Judge)' 카테고리의 다른 글
[백준 - 2033번] 반올림 - Java //Wello Horld// (0) 2020.01.03 [백준 - 1977번] 완전제곱수 - Java //Wello Horld// (0) 2020.01.03 [백준 - 1676번] 팩토리얼 0의 개수 - Java //Wello Horld// (0) 2019.12.31 [백준 - 1620번] 나는야 포켓몬 마스터 이다솜 - Java //Wello Horld// (0) 2019.12.31 [백준 - 1543번] 문서 검색 - Java //Wello Horld// (0) 2019.12.27