https://www.acmicpc.net/problem/1966
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
static StringBuilder sb=new StringBuilder();
public static void main(String args[]) throws Exception {
int num=Integer.parseInt(br.readLine());
for(int iter=0;iter<num;iter++) {
Queue<Data> queue=new LinkedList<>();
String[] s=br.readLine().split(" ");
int n=Integer.parseInt(s[0]);
int m=Integer.parseInt(s[1]);
String[] s2=br.readLine().split(" ");
for(int i=0;i<n;i++) {
queue.offer(new Data(i, Integer.parseInt(s2[i])));
}
int cnt=1;
while(!queue.isEmpty()) {
Data currentData=queue.poll();
Iterator<Data> iterator=queue.iterator();
boolean isCheck=true;
while(iterator.hasNext()){
Data data=(Data)iterator.next();
if(currentData.priority<data.priority) {
isCheck=false;
break;
}
}
if(isCheck==false) queue.offer(currentData);
else {
if(currentData.index==m) System.out.println(cnt);
else cnt++;
}
}
}
}
}
class Data{
int index;
int priority;
public Data(int index, int priority) {
this.index=index;
this.priority=priority;
}
}
이 문제는 큐를 이용해서 해결하려고 했는데요, Data 클래스를 선언해줘서 큐를 관리했습니다.
Data 클래스에는 처음에 삽입되는 순서인 index 변수와, 우선순위를 나타내는 priority 변수를 선언해주었습니다.
처음에 cnt라는 변수(원하는 데이터가 몇 번째에 출력되는지 나타내는 변수)를 선언하고, 큐에서 데이터를 빼내줍니다.
그리고 Iterator를 이용해서 큐를 모두 살펴보면서 만약 현재 빼낸 데이터의 우선순위보다 큰 우선순위를 가진 데이터가 있으면 빼낸 큐를 다시 삽입하는 방식으로 큐를 정렬시켰습니다.
여기서 iterator 클래스는 컬렉션 클래스에서 데이터를 읽어올 때 쓰입니다.
제가 썼던 iterator 함수를 살펴보면 hasNext()는 boolean 함수로 데이터가 iterator에 남아 있으면 true, 아니면 false를 출력합니다.
그리고 next() 메서드는 다음 데이터를 나타냅니다.
다시 문제로 돌아가보면, 만약 현재 데이터의 우선순위보다 큰 우선순위를 가진 데이터가 없으면 cnt를 +1해주고, 데이터가 출력되는 순서가 되면 cnt 값을 출력해주었습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 2748번] 피보나치 수 2(JAVA) (0) | 2020.08.02 |
---|---|
[BOJ 1932번] 정수 삼각형(JAVA) (0) | 2020.08.02 |
[BOJ 2164번] 카드2(자바) (0) | 2020.07.31 |
[BOJ 18258번] 큐 2(JAVA) (0) | 2020.07.31 |
[BOJ 9012번] 괄호(JAVA) (0) | 2020.07.29 |