문제
지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다.
지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다.
큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때, 그 원소를 주어진 순서대로 뽑아내는데 드는 2번, 3번 연산의 최솟값을 출력하는 프로그램을 작성하시오.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
// 백준 1021 큐 문제
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int nidx = in.nextInt();
LinkedList<Integer> queue = new LinkedList<>();
for (int i = 0; i < n; i++) {
queue.add(i + 1);
}
ArrayList<Integer> idxList = new ArrayList<>();
for (int i = 0; i < nidx; i++) {
idxList.add(in.nextInt());
}
int count = 0;
for (Integer num : idxList) {
if (queue.peek() == num) {
queue.poll();
continue;
} else {
//2번과정을 해야할지 3번과정을 해야할지에 대한 조건
if (queue.indexOf(num) > (double) queue.size() / 2) {
while (queue.peek() != num) {
queue.addFirst(queue.pollLast());
count++;
}
queue.poll();
} else {
while (queue.peek() != num) {
queue.addLast(queue.pollFirst());
count++;
}
queue.poll();
}
}
}
System.out.println(count);
}
}