🐣 알고리즘 삐약/💻 백준 삐약
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