[백준 1021 자바] 회전하는 큐

일단 해볼게·2023년 4월 4일
0

백준

목록 보기
113/132

https://www.acmicpc.net/problem/1021

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
    private static void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        LinkedList<Integer> list = new LinkedList<>();
        for (int i = 1; i <= n; i++)
            list.add(i);

        st = new StringTokenizer(br.readLine());
        int cnt = 0;    //횟수

        while (m-- > 0) {
            int num = Integer.parseInt(st.nextToken());
            int idx = list.indexOf(num);

            // 1번 연산
            if (idx == 0) {
                list.pollFirst();
                continue;
            }

            // 2번 연산
            if (idx < list.size() - idx) {
                for (int i = 0; i < idx; i++ ){
                    list.offerLast(list.pollFirst()); // 앞에서 제거 후 뒤에 삽입
                }
                cnt += idx;
            }
            else { // 3번 연산
                for (int i = 0; i < list.size() - idx; i++){
                    list.offerFirst(list.pollLast()); // 앞에서 제거 후 뒤에 삽입
                }
                cnt += list.size() - idx;
            }
            list.pollFirst(); // 인덱스 0 제거
        }

        System.out.println(cnt);

    }

    public static void main(String[] args) throws Exception {
        solution();
    }
}

deque.offerLast(); //Deque의 뒤쪽에 데이터를 삽입 후 true, 용량 초과시 false
deque.pollFirst(); // Deque의 앞에서 제거, 비어있으면 null 리턴

deque 참고 : https://hbase.tistory.com/128

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글