
class를 사용한 큐 문제이다.
- 순서와 중요도를 가진 class를 선언하고, 그 클래스로 큐를 만든다.
- 첫 번째 큐의 요소보다 큰 중요도를 가진 요소가 뒤에 존재한다면 첫 번째 큐를 뒤로 보낸다. 이때 flag로 표시를 해줘서 첫 번째 큐의 요소보다 큰 중요도를 가진 요소가 뒤에 있다는 것을 표시한다.
- flag에 표시가 되지 않은경우는 첫 번째 큐의 요소보다 큰 중요도를 가진 요소가 없다는 것을 뜻하므로 인쇄한다.(poll())
- 몇 번 인쇄했는지 순서가 중요하므로 인쇄 횟수를 저장한다.
- (cnt) 이때 인쇄한 큐의 요소의 순서가 입력받은 M과 같으면 인쇄횟수(cnt)를 출력한다.
자세한 설명은 주석으로 표시했다.
아래는 전체 코드이다.
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 BOJ1966 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K, N, M, i, j, flag, cnt = 0;
StringTokenizer st;
Queue<Document> queue = new LinkedList<>();
K = Integer.parseInt(br.readLine());
for(i=0;i<K;i++){
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
// 큐 입력 받기
st = new StringTokenizer(br.readLine());
for(j=0;j<N;j++){
queue.add(new Document(j,Integer.parseInt(st.nextToken())));
}
// M번째 문서가 몇번째로 인쇄되는지 찾기
while(!queue.isEmpty()){
flag = 0;
Document current = queue.peek();
for(Document doc : queue){ // 뒤에 현재보다 중요도가 높은 문서가 있는지 확인
if(doc.getPriority() > current.getPriority()){ // 있으면 뒤로 보내기
flag = 1; // 중요도 높은 문서가 뒤에 있다는 표시
queue.add(queue.poll());
break;
}
}
if(flag == 0){ // 현재보다 중요도가 높은 문서가 없음
Document printDc = queue.poll(); // 인쇄하기
cnt++; // 인쇄 횟수 세기
if(printDc.getIndex() == M){
System.out.println(cnt);
}
}
}
cnt = 0;
}
}
}
public class Document {
int index;
int priority;
public Document(int index, int priority) {
this.index = index;
this.priority = priority;
}
public int getIndex() {
return index;
}
public int getPriority() {
return priority;
}
}
'코딩가딩가' 카테고리의 다른 글
| [JAVA]BOJ 5430, AC (0) | 2024.08.21 |
|---|---|
| [JAVA]BOJ 10866, 덱 (0) | 2024.08.20 |
| [JAVA]BOJ 10845, 큐 (0) | 2024.08.18 |
| [JAVA]BOJ 2164, 카드2 (0) | 2024.08.18 |
| [JAVA]BOJ 2161, 카드1 (0) | 2024.08.18 |