알고리즘

[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