1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
package Deque;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Baekjoon_1021_회전하는큐 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken()); // 큐의 크기
Deque<Integer> dq = new LinkedList<>();
for(int i = 0; i < N; i++) {
dq.offerLast(i+1);
}
int M = Integer.parseInt(st.nextToken()); // 뽑아내는 수의 개수
int[] arr = new int[M];
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < M; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int count = 0;
for(int i = 0; i < M; i++) {
while(true) {
// 가장 앞에 원하는 숫자가 있다면 삭제
if(dq.peekFirst() == arr[i]) {
dq.pollFirst();
break;
}
// 원하는 숫자가 Deque에 어디 들어있는 지 확인
int index = 0;
Iterator<Integer> it = dq.iterator();
while(it.hasNext()) {
if(it.next() == arr[i])
break;
index++;
}
if(index > dq.size() / 2) {
dq.offerFirst(dq.pollLast());
count++;
}
else {
dq.offerLast(dq.pollFirst());
count++;
}
}
}
System.out.println(count);
}
}'알고리즘 > BAEKJOON' 카테고리의 다른 글
| 11656 접미사 배열 (0) | 2021.08.04 |
|---|---|
| 3190 뱀 (0) | 2021.08.03 |
| 5052 전화번호 목록 (0) | 2021.07.28 |
| 1541 잃어버린 괄호 (0) | 2021.07.28 |
| 9375 패션왕 신해빈 (0) | 2021.07.28 |