BOJ 1021. 회전하는 큐

less than 1 minute read

BOJ 1021. 회전하는 큐

image image image

풀이

왼쪽 오른쪽으로 회전하는 것은 덱을 이용하여 양쪽에서 삽입 삭제를 해주면 쉽게 구현이 가능하다.
덱에 1~n 까지 삽입한 후, 원하는 값이 나온다면 덱에서 poll,
원하는 값이 나오지 않는다는 왼쪽 또는 오른쪽으로 Shift해준다.
현재 인덱스가 덱사이즈의 절반이상인지 이하인지 판단하여 더 가까운 쪽으로 Shift할 방향을 결정한다.

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] str1 = br.readLine().split(" ");
        int n = Integer.parseInt(str1[0]);
        int m = Integer.parseInt(str1[1]);

        Deque<Integer> deque = new LinkedList<>();

        for (int i = 1; i <= n; i++) deque.add(i);

        String[] str2 = br.readLine().split(" ");
        int result = 0;
        for (int z = 0; z < m; z++) {
            int number = Integer.parseInt(str2[z]);
            while (true) {
                int idx = 0;
                Iterator<Integer> it = deque.iterator();
                while (it.hasNext()) {
                    if (it.next() == number) break;
                    idx++;
                }
                if (idx == 0) {
                    deque.pollFirst();
                    break;
                } else if (deque.size() / 2 >= idx) {
                    deque.addLast(deque.pollFirst());
                    result++;
                } else {
                    deque.addFirst(deque.pollLast());
                    result++;
                }
            }
        }
        System.out.println(result);
    }
}