본문 바로가기

머리맞대는이야기/백준

[1966] 프린터 큐

반응형

출처: www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

첫 줄에 test case의 수가 주어진다. 각 test case에 대해서 문서의 수 N(100이하)와 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue의 어떤 위치에 있는지를 알려주는 M(0이상 N미만)이 주어진다. 다음

www.acmicpc.net

풀이과정

1. 입력이 많으니 먼저 정리하자

 

첫줄은 테스트 케이스 갯수

N :  해당 문서의 전체 수 

M : 궁금한 문서의 위치, 0부터 셈(1번째로 취급)

 

2. 자바 priorityQueue 풀었던 과정을 떠올리자.

 


작성코드

package Test;

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

public class MainNew {

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);

		int T = sc.nextInt();
		int[] answer = new int[T];

		// 테스트케이스 갯수만큼 반복하면서 입력 받기
		for (int i = 0; i < T; i++) {
			int N = sc.nextInt();
			int M = sc.nextInt();
			ArrayList<Integer> arrList = new ArrayList<>();

			for (int j = 0; j < N; j++) {
				int tmp = sc.nextInt();
				arrList.add(tmp);
			} // arrayList 에 주어진 큐 담기

			PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());
			for (int k = 0; k < N; k++) {
				priorityQueue.add(arrList.get(k));
			} // priorityQueue 에 옮겨 담기, 내림차순

			int cnt = 0;
			while (!priorityQueue.isEmpty()) {
				// 새로 만든 큐와 기존의 리스트의 각각의 값을 비교한다.
				for (int u = 0; u < arrList.size(); u++) {
					// 큐에서 꺼내서 비교해보고 기존 리스트의 값과 같으면 꺼냄
					if (priorityQueue.peek() == arrList.get(u)) {
						priorityQueue.poll();
						// 출력 순서 카운팅
						cnt++;
						// 여기서 그냥 끝내버리면 안된다.
						// 기존리스트에 담겨있던 값의 위치까지 동일한지 체크 (혹시 동일한 값이 있으면 여기서 한번 더 체크됨)
						if (M == u) {
							answer[i] = cnt;
							priorityQueue.clear();
							break;
						}

					}
				} // for u

			} // while

		} // for i
		for (int i = 0; i < T; i++) {
			System.out.println(answer[i]);
		} // 정답 출력

	}
} // MainNew

 

memo

bufferdreader,writer 보다는 아직은 이게 더 익숙한 것 같다.

자꾸 에러가 난다..

큐에는 peek 도 있다는거 잊지말자

 

구현하지 못한 부분은 동일 값을 체크해줄 수 있는 기존 값 위치 필터링 부분.

 

저번에 풀었던 프로그래머스의 프린터 문제와 매우 비슷하다.

사실 똑같은 것 같다. 찾아보니 한달밖에 안되었는데 완전히 풀지 못하였다ㅜㅜ

그래도 처음 풀때보다는 수월하다.

평일에 푸는 건 정말 힘든 것 같다. 그래도 정말 조금의 보람이 있었다..

 

 

반응형

'머리맞대는이야기 > 백준' 카테고리의 다른 글

[2920] 음계  (0) 2020.10.14
[7490] 0 만들기  (0) 2020.10.04
[1074] Z  (0) 2020.10.04
[2747] 피보나치 수  (0) 2020.10.03
[1939] 중량제한  (0) 2020.09.30