🐣 알고리즘 삐약/💻 백준 삐약

52 삐약 : 백준 1021| 회전하는큐 [바킹독 문제 풀이Deque|JAVA]

우주수첩 2024. 5. 8. 16:18
728x90

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

 

package BKD_0x7_Deque;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class BOJ_1021 {

    public static void main(String[] args) throws IOException {

        LinkedList<Integer> dq = new LinkedList<>();

        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());
        int count =0;

        String input_str[] = br.readLine().split(" ");
        ArrayList<Integer> input = new ArrayList<>();

        for(int i=1;i<=N;i++) dq.add(i);
        for(String str : input_str) input.add(Integer.parseInt(str));


        for(int i=0;i<M;i++){
            int target = input.get(i);
            int mid = dq.size()/2;

            while(true){
                int target_idx = dq.indexOf(target);
                if(target_idx==0) {dq.poll(); break;}
                else if (target_idx<=mid) {
                    int temp = dq.peek();
                    dq.poll();
                    dq.addLast(temp);
                    count++;
                }
                else if(target_idx>mid){
                    int temp = dq.peekLast();
                    dq.pollLast();
                    dq.addFirst(temp);
                    count++;
                }
                else break;
            }

        }
        System.out.println(count);
        br.close();
    }
}

 

 

풀이

1. index_of() 함수를 사용하여 타겟의 위치를 알아낸다

2_1. index가 0일경우 해당 타겟을 뽑아낸다.

2_2. 왼쪽에 치우쳐있을 경우 2번 연산을 진행한다

2_3. 오른쪽에 가까울 경우 3번연산을 진행한다.

3. 입력한 타겟 개수만큼 진행한다.

 

728x90