[Solved]/BOJ

[백준 1021] 회전하는 큐

응파카 2023. 3. 31. 16:43

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

 

1021번: 회전하는 큐

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

www.acmicpc.net

 

  • Deque 자료구조를 이용하면 풀기 수월하다.

 

  • 연산 횟수를 세는 경우는 오른쪽으로 한 칸씩 미는 경우와 왼쪽으로 한 칸씩 미는 경우 두 가지이다.
  • 한 칸씩 이동하는 이유는 Deque의 첫 번째 값을 뽑아내는 1번 연산을 하기 위함이다.

 

  • 찾고자 하는 숫자의 처음 Deque에서의 위치가 주어지면 두 가지 경우로 나뉜다.

    1. 오른쪽으로 한 칸씩 밀어가며 숫자를 첫 번째 값으로 위치시킬 것인지
    2. 왼쪽으로 한 칸씩 밀어가며 숫자를 첫 번째 값으로 위치시킬 것인지
  • 찾고자 하는 숫자의 현재 index가 Deque 크기의 중간보다 작은 수라면 왼쪽으로 민다.
  • 찾고자 하는 숫자의 현재 index가 Deque 크기의 중간보다 큰 수라면 오른쪽으로 민다.

 

  • 밀 때마다 count를 센다.

 

 

import java.io.*;
import java.util.*;

public class Main {
	
	static int n, m, count;
	static LinkedList<Integer> deque = new LinkedList<>();
	
	public void solution(int find) {
		int mid;
		if(deque.size()/2==0) mid = deque.size()/2;
		else mid = deque.size()/2;
		
		if(deque.indexOf(find) <= mid) {
			while(deque.peekFirst()!=find) {
				int temp = deque.pollFirst();
				deque.offerLast(temp);
				count++;
			}			
		}
		else {
			while(deque.peekFirst()!=find) {
				int temp = deque.pollLast();
				deque.offerFirst(temp);
				count++;
			}
		}
		int out = deque.pollFirst();
//		System.out.println(out + "  count : " + count + " | size : " + deque.size() + " | mid : " + mid);
	}

	public static void main(String[] args) throws IOException{
		Main T = new Main();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer stk1 = new StringTokenizer(br.readLine());
		n = Integer.parseInt(stk1.nextToken());
		m = Integer.parseInt(stk1.nextToken());
		count = 0;
		
		for(int i=1; i<=n; i++) deque.add(i);
		
		StringTokenizer stk2 = new StringTokenizer(br.readLine());
		for(int i=0; i<m; i++) {
			int find = Integer.parseInt(stk2.nextToken());
			T.solution(find);
		}
		
		System.out.println(count);
	}
}

 

'[Solved] > BOJ' 카테고리의 다른 글

[백준 1927] 최소 힙  (0) 2023.04.28
[백준 1464] 뒤집기 3  (0) 2023.04.26
[백준 5430] AC  (0) 2023.04.26
[백준 1991] 트리순회  (0) 2023.03.25
[백준 11275] 트리의 부모찾기  (0) 2023.03.23