회전하는 큐

문제 풀러가기

1021

코드

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

public class Main {
  public static void main(String[] args) throws IOException {
    Scanner sc = new Scanner(System.in);
    boolean flag;

    ArrayList<Integer> list = new ArrayList<Integer>();

    int n = sc.nextInt();
    int m = sc.nextInt();
    int num = 0;
    int answer = 0;

    for(int i = 0; i < n; i++) {
      list.add(i + 1);
    }

    for(int i = 0; i < m; i++) {
      num = sc.nextInt();
      flag = false;

      while(!flag) {
        if(list.get(0) == num) {
          list.remove(0);
          flag = true;
        } else {
          if(list.indexOf(num) <= list.size() / 2)
            list.add(list.size() - 1, list.remove(0));
          else
            list.add(0, list.remove(list.size() - 1));
          answer++;
        }
      }
    }

    System.out.println(answer);
  }
}

설명

큐의 동작원리를 이해하면 풀기 쉬운 문제이다. 리스트에 숫자를 채우는데 오름차순으로 채운다. 원하는 숫자의 위치가 앞이 가까운지 뒤가 가까운지를 확인한 후 2번 연산 혹은 3번 연산을 수행하고 매 수행마다 카운트를 증가시킨다. 그리고 증가한 카운트를 출력한다.