230126 TIL+백준 1966: 프린터 큐(JAVA)

won·2023년 1월 26일
0

알고리즘 문제풀이

목록 보기
10/32

TIL

단계별 문제 풀어보기 큐 문제를 풀어봤다.

백준 1966번: 프린터 큐

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

값을 리스트와 변수에 넣고 리스트에 있는 요소를 하나씩 비교하여 타겟 변수와 일치하면 count를 높이는 방식으로 푼다는 건 생각해냈다.
중요도 비교 알고리즘 구현에서 막혀서 다른 사람 풀이를 참고했다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.StringTokenizer;

public 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));

		int T = Integer.parseInt(br.readLine());

		while (T-- > 0) {
			StringTokenizer st = new StringTokenizer(br.readLine());

			int size = Integer.parseInt(st.nextToken());
			int target = Integer.parseInt(st.nextToken());

			LinkedList<int[]> q = new LinkedList<int[]>();

			StringTokenizer s = new StringTokenizer(br.readLine());
			for (int i = 0; i < size; i++) {

				int[] arr = { i, Integer.parseInt(s.nextToken()) };
				q.add(arr);
			}
			int count = 0;

			while (!q.isEmpty()) {

				boolean isMax = true;
				int[] front = q.poll();
				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());
						}
						isMax = false;
						break;
					}
				}
				
				if (isMax == false) {
					continue;
				}
				
				count++;
				if (front[0] == target) {
					break;
				}
			}
			bw.write(count + "\n");
		}
		bw.flush();
	}
}
profile
뭐라도 하자

0개의 댓글