1. 문제 링크
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
큐에 입력받은 문서의 번호와 중요도를 넣는다.
그리고 중요도는 따로 list에 저장해서 중요도가 가장 높은 문서를 찾기 위해 사용한다.
이 중요도는 Collections.reverseOrder()로 숫자가 큰 순서, 즉 내림차순으로 정렬한다.
큐에서 하나씩 빼면서 중요도가 가장 높은 문서가 아니라면 다시 큐에 넣는다.
중요도가 가장 높은 문서는 빼는데 그게 원하는 문서라면 반복문을 끝낸다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Queue;
import java.io.IOException;
public class Main {
static class Node{
int num;
int star;
public Node(int num, int star) {
super();
this.num = num;
this.star = star;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int t=0;t<T;t++) {
String[] split = br.readLine().split(" ");
int N = Integer.parseInt(split[0]);
int M = Integer.parseInt(split[1]);
Queue<Node> queue = new ArrayDeque<>();
ArrayList<Integer> list = new ArrayList<>();
split = br.readLine().split(" ");
for(int i=0;i<N;i++) {
int temp = Integer.parseInt(split[i]);
queue.offer(new Node(i, temp));
list.add(temp);
}
Collections.sort(list, Collections.reverseOrder());
int result = 0;
while(true) {
Node now = queue.poll();
if(now.star == list.get(0)) { //제일 중요도가 큰 녀석
if(now.num == M) { //그게 원하는 문서라면
result++;
break;
}
else { //아니라면 그 중요도만 지움
list.remove(0);
result++;
}
}
else {
queue.offer(now);
}
}
sb.append(result).append("\n");
}
System.out.println(sb);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 10971 외판원 순회2 (Java) (0) | 2023.04.23 |
---|---|
백준 1874 스택 수열 (Java) (0) | 2023.04.23 |
백준 1463 1로 만들기 (Java) (0) | 2023.04.22 |
백준 6593 상범 빌딩 (Java) (0) | 2023.04.21 |
백준 14502 연구소 (Java) (0) | 2023.04.21 |