https://www.acmicpc.net/problem/1966
큐를 q1(오리지널 큐), q2(임시 큐)로 두 개 만들어서 풀었다.
q1의 맨 앞의 값을 미리 빼놓고, 큐에 들어 있는 나머지 값들과 비교해주면서 q2로 넣어줬다.
중요도가 더 큰 문서가 있으면, 맨 앞에 있던 문서도 q2에 넣어주었다.
그 다음 q2에 있던 값들을 다시 q1으로 넣어주고, 답을 찾을 때까지 반복하는 방식으로 접근했다.
import java.io.*;
import java.util.*;
class Document {
int index;
int val;
public Document(int index, int val) {
super();
this.index = index;
this.val = val;
}
}
public class Main_bj_1966_프린터큐 {
public static int N, M;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
Queue<Document> q1 = new LinkedList<Document>();
Queue<Document> q2 = new LinkedList<Document>();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
int n=Integer.parseInt(st.nextToken());
q1.offer(new Document(i,n));
}
int ans=0;
while(true) {
Document front = q1.poll();
int index = front.index;
int val = front.val;
boolean f=false;
while(!q1.isEmpty()) {
Document next = q1.poll();
q2.offer(next);
if(f==false && val<next.val) {
f=true;
}
}
if(f==false){
ans++;
if(index==M) {
System.out.println(ans+" ");
break;
}
}else {
q2.offer(front);
}
while(!q2.isEmpty()) {
q1.offer(q2.poll());
}
}
}
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 2054] 괄호의 값(JAVA) (1) | 2020.03.04 |
---|---|
[백준 2174] 로봇 시뮬레이션(JAVA) (2) | 2020.03.04 |
[백준 2023] 신기한 소수(JAVA) (0) | 2020.03.03 |
[백준 1764] 듣보잡(JAVA) (0) | 2020.03.03 |
[백준 1389] 케빈 베이컨의 6단계 법칙(JAVA) (0) | 2020.03.01 |
댓글