728x90
문제
https://www.acmicpc.net/problem/1966
풀이 코드
- 문서의 순서의 우선순위를 저장하고 있어야되기 때문에 Document 클래스를 만들어서 풀이
package boj;
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 boj_1966 {
//문서의 순서와 우선순위를 알고 있어야되기 때문에 클래스로 만들었다.
static class Document {
int order;
int priority;
public Document(int order, int priority) {
this.order = order;
this.priority = priority;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int numOfTestCase = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numOfTestCase; i++) {
Queue<Document> q = new LinkedList<>();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); //문서의 개수
int m = Integer.parseInt(st.nextToken()); //큐에서의 문서 위치
int maxPriority = Integer.MIN_VALUE; //큐에 있는 문서의 가장 높은 우선순위 값
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
int priority = Integer.parseInt(st.nextToken());
maxPriority = Math.max(maxPriority, priority);
q.offer(new Document(j, priority));
}
int mOrder = getPrintOrder(q, m, maxPriority);
sb.append(mOrder).append("\n");
}
System.out.println(sb);
}
/**
* @param m 문서 위치
* @return 문서 위치 m의 출력 순서
*/
private static int getPrintOrder(Queue<Document> q, int m, int maxPriority) {
int count = 0; //인쇄 순서
while(!q.isEmpty()) {
Document doc = q.poll();
//우선순위가 maxPriority보다 낮으면 다시 큐에 넣는다.
if (doc.priority < maxPriority) {
q.offer(doc);
} else {
count++;
if (doc.order == m) {
return count;
}
//꺼낸 문서의 중요도가 maxPriority보다 높거나 같으면 큐에 남아있는 문서들 중 maxPriority를 알 수 없기 때문에 다시 계산해야한다.
maxPriority = q.stream().mapToInt(d -> d.priority).max().getAsInt();
}
}
return -1;
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[알고리즘/백준] 2164 카드2(자바, 큐(Queue)) (0) | 2021.09.25 |
---|---|
[알고리즘/백준] 1978 소수 찾기(자바, 에라토스테네스의 체) (0) | 2021.09.24 |
[알고리즘/백준] 1929 소수 구하기(자바, 에라토스테네스의 체) (0) | 2021.09.24 |
[알고리즘/백준] 1920 수 찾기(자바, 이진탐색, BinarySearch) (0) | 2021.09.23 |
[알고리즘/백준] 1018 체스판 다시 칠하기(자바) (0) | 2021.09.23 |
댓글