알고리즘
[java] 1021: 회전하는 큐
_DAMI
2023. 4. 11. 22:28
덱
문제
https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
풀이
package main;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
LinkedList<Integer> deque = new LinkedList<Integer>();
int count = 0;
int N= kb.nextInt();
int M= kb.nextInt();
//덱에 담기
for(int i=1; i<=N; i++) {
deque.offer(i);
}
int[] arr = new int[M];
for(int i=0; i<M; i++) {
arr[i]= kb.nextInt();
}
for(int i=0; i<M; i++) {
int target_idx = deque.indexOf(arr[i]);
int half_idx;
if(deque.size()%2==0) {
half_idx = deque.size()/2 -1;
}else {
half_idx = deque.size()/2;
}
//중간지점 보다 앞에 있을 경우
if(target_idx <= half_idx) {
for(int j=0; j< target_idx; j++) {
int tmp = deque.pollFirst(); //2번 연산, 앞원소를 뽑아서 뒤로
deque.offerLast(tmp);
count++;
}
}else { //중간지점 보다 뒤에 3번연산, 뒤원소를 앞으로
for(int j=0;j<deque.size()-target_idx; j++) {
int tmp = deque.pollLast();
deque.offerFirst(tmp);
count++;
}
}
//1번 연산
deque.pollFirst();
}
System.out.println(count);
}
}
참고블로그
설명을 잘하셔서 덱을 이해하는데 도움이 됨
https://st-lab.tistory.com/216
[백준] 1021번 : 회전하는 큐 - JAVA [자바]
www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는
st-lab.tistory.com