백준
백준 [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에서 한번 잘못 써서 틀렸는데 이런 실수 빼곤 풀만했다.