[Java] 백준 1966번 프린터 큐
2022. 4. 13. 19:28
728x90
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
이번 문제는 중요도와 문서의 위치와 중요도를 저장하여 현재 리스트에서 우선순위가 높은 순서대로 만들어 M과 위치가 같을 경우 이 문서가 몇번째로 인쇄되는지 카운트로 출력해주면 됩니다.
처음 문제를 접했을 때 조금 어렵게 생각했었는데,
생각해보니 그냥 값을 리스트에 순서와 중요도를 넣어 하나씩 비교해주면 된다고 생각했습니다.
현재 비교할려는 중요도보다 큰 값이 Q에 존재할 경우 마지막으로,
큰 값이 없을 경우 카운트 증가와 M과 비교하여 같을 경우 카운트를 출력해주면 됩니다.
package BJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BJ_프린터큐 {
static int T;
static int N, M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int cnt = 0;
Queue<int []> q = new LinkedList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
q.offer(new int[] {i, Integer.parseInt(st.nextToken())});
}
while(!q.isEmpty()) {
int[] now = q.poll();
boolean check = true;
for (int[] que : q) {
if(que[1] > now[1]) {
check = false;
break;
}
}
if(check) {
cnt++;
if(now[0] == M) break;
} else {
q.add(now);
}
}
System.out.println(cnt);
}
}
}
Ysik Github : https://github.com/Y1sik/Algorithm/blob/main/BJ/BJ_%ED%94%84%EB%A6%B0%ED%84%B0%ED%81%90.java
반응형
'알고리즘' 카테고리의 다른 글
[Java] 백준 1357번 뒤집힌 덧셈 (0) | 2022.04.15 |
---|---|
[Java] 백준 14503번 로봇 청소기 (0) | 2022.04.14 |
[Java] 백준 7567번 그릇 (0) | 2022.04.12 |
[Java] 백준 1439번 뒤집기 (0) | 2022.04.11 |
[Java] 백준 1373번 2진수 8진수 (0) | 2022.04.10 |