본문 바로가기

알고리즘/BAEKJOON

1021 회전하는 큐

1021번: 회전하는 큐 (acmicpc.net)

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net

package Deque;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Baekjoon_1021_회전하는큐 {

	public static void main(String[] args) throws Exception {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int N = Integer.parseInt(st.nextToken()); // 큐의 크기
		Deque<Integer> dq = new LinkedList<>();
		for(int i = 0; i < N; i++) {
			dq.offerLast(i+1);
		}
		
		int M = Integer.parseInt(st.nextToken()); // 뽑아내는 수의 개수
		int[] arr = new int[M];
		
		st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < M; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
	
		int count = 0;

		for(int i = 0; i < M; i++) {
			
			
			while(true) {
				
				// 가장 앞에 원하는 숫자가 있다면 삭제
				if(dq.peekFirst() == arr[i]) {
					dq.pollFirst();
					break;
				}
				
				// 원하는 숫자가 Deque에 어디 들어있는 지 확인
				int index = 0;
				Iterator<Integer> it = dq.iterator();
				while(it.hasNext()) {
					if(it.next() == arr[i])
						break;
					index++;
				}

				if(index > dq.size() / 2) {
					dq.offerFirst(dq.pollLast());
					count++;
				}
				else {
					dq.offerLast(dq.pollFirst());
					count++;
				}

			}

		}
		System.out.println(count);
		
	}

}

'알고리즘 > BAEKJOON' 카테고리의 다른 글

11656 접미사 배열  (0) 2021.08.04
3190 뱀  (0) 2021.08.03
5052 전화번호 목록  (0) 2021.07.28
1541 잃어버린 괄호  (0) 2021.07.28
9375 패션왕 신해빈  (0) 2021.07.28