백준

백준 [1021번]: 회전하는 큐 ( Java )

하루우울루 2023. 2. 14. 11:15

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

 

1021번: 회전하는 큐

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

www.acmicpc.net


개발환경은 eclipse를 사용했습니다.

 

 

 

 

Code

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

public class Main
{
	public static void main(String[] args) throws IOException  
	{
		Deque<Integer> deque = new LinkedList<>();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		st = new StringTokenizer(br.readLine()," ");
		int count = 0;
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		for(int i=n;i>=1;i--)
		{
			deque.offerFirst(i);
		}
		
		int t = m;
		int cheak = 0;
		int num = 0;
		int result = 0;
		
		st = new StringTokenizer(br.readLine()," ");
		
		while(t > 0)
		{
			if(cheak == 0)
			{
				num = Integer.parseInt(st.nextToken());
			}
			
			if(deque.peekFirst() == num)
			{
				if(count >= deque.size()-count)
				{
					count = deque.size()-count;
				}
				deque.removeFirst();
				t--;
				cheak = 0;
				result+= count;
				count = 0;
			}
			
			else
			{
				int k = deque.pollFirst();
				
				deque.offerLast(k);
				count++;
				cheak = 1;
			}
		}
		
		System.out.print(result);
		
	}
}

왼쪽이동을 기준으로 계산하도록 만들었습니다.

whlie에서 반복되는 동안 if문에서 peekFirst로 뽑은 값과 구하고자 하는 값이 같은 경우 제거했고

아닌 경우 else 문을 통해서 왼쪽이동을 시키면서  count 값을 증가시켰습니다

 

이때 왼쪽이동과 오른쪽이동 중 더 적게 이동한 값을 구해야 하는데 deque.size()에서 왼쪽이동 값을 빼주어 오른쪽 이동 값을 구해서 비교했습니다.

 

입력받을 때 Tokenizer에서 한번 잘못 써서 틀렸는데 이런 실수 빼곤 풀만했다.