내가 생각했을때 문제에서 원하는부분
첫 줄에 테스트케이스의 수가 주어진다. 각 테스트케이스는 두 줄로 이루어져 있다.
테스트케이스의 첫 번째 줄에는 문서의 개수 N(1 ≤ N ≤ 100)과, 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue에서 몇 번째에 놓여 있는지를 나타내는 정수 M(0 ≤ M < N)이 주어진다.
이때 맨 왼쪽은 0번째라고 하자.
두 번째 줄에는 N개 문서의 중요도가 차례대로 주어진다.
중요도는 1 이상 9 이하의 정수이고, 중요도가 같은 문서가 여러 개 있을 수도 있다.
각 테스트 케이스에 대해 문서가 몇 번째로 인쇄되는지 출력한다.
내가 이 문제를 보고 생각해본 부분
표준 입력을 읽기 위해 BufferedReader를 사용한다.
StringBuilder 객체를 생성한다.
테스트 케이스의 수를 입력받는다.
테스트 케이스 반복:
각 테스트 케이스에 대해 반복한다.
첫 번째 줄에서 문서의 개수 N과 몇 번째 문서를 확인할 것인지 M을 입력받는다.
두 번째 줄에서 문서의 중요도를 입력받아 큐에 저장한다.
큐 및 문서 처리:
문서의 인덱스와 중요도를 저장할 큐를 생성한다.
각 문서의 중요도를 큐에 추가해준다.
인쇄 순서 계산:
큐가 비어있지 않은 동안 반복한다.
현재 문서를 꺼내고, 큐에 남아있는 문서들 중 중요도가 더 높은 문서가 있는지 확인한다.
만약 중요도가 더 높은 문서가 있다면 현재 문서를 큐의 뒤로 재배치한다.
그렇지 않으면 출력한다.
결과 저장:
M번째 문서가 인쇄될 때, 그 순서를 StringBuilder에 추가한다.
결과 출력:
모든 테스트 케이스의 결과를 한 번에 출력한다.
System.out.print(sb.toString());를 사용하여 결과를 출력한다.
코드로 구현
package baekjoon.baekjoon_26;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
// 백준 1966번 문제
public class Main931 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(); // 결과를 저장할 StringBuilder
int testCases = Integer.parseInt(br.readLine());
for(int t = 0; t < testCases; t++) {
// 첫 번째 줄 입력 처리
String[] firstLine = br.readLine().split(" ");
int N = Integer.parseInt(firstLine[0]);
int M = Integer.parseInt(firstLine[1]);
// 두 번째 줄 입력 처리
String[] priorities = br.readLine().split(" ");
Queue<Document> queue = new LinkedList<>();
for(int i = 0; i < N; i++) {
int priority = Integer.parseInt(priorities[i]);
queue.add(new Document(i, priority)); // 문서의 인덱스와 중요도를 저장
}
int printOrder = 0;
while(!queue.isEmpty()) {
Document current = queue.poll();
boolean hasHigherPriority = false;
for(Document doc : queue) {
if(doc.priority > current.priority) {
hasHigherPriority = true;
break;
}
}
if(hasHigherPriority) {
queue.add(current); // 중요도가 낮으면 재배치
} else {
printOrder++;
if(current.index == M) {
sb.append(printOrder).append("\n"); // M번째 문서가 인쇄될 때 결과에 추가
break;
}
}
}
}
// 모든 결과를 한꺼번에 출력
System.out.print(sb.toString());
br.close();
}
static class Document {
int index; // 문서의 원래 인덱스
int priority; // 문서의 중요도
Document(int index, int priority) {
this.index = index;
this.priority = priority;
}
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.