걸음마부터 달리기
[24/11/03] 큐 본문
누가봐도 큐 문제니까 문제 해설은 하지 않겠다.
미친척하고 깡으로 큐 구현한건 아래와 같다.
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
static int front=1000000;
static int rear=1000001;
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());
int[] arr = new int[2000000];
for(int i=n; i>=1; i--){
add(arr,n-i+1);
}
while(front!=rear){
poll(arr); //제일 위 카드 제거하고
int temp = peek(arr);
poll(arr);
add(arr,temp);
}
System.out.printf("%d",peek(arr));
}
public static void poll(int[] arr){
front--;
}
public static void add(int[] arr,int num){
if(front==1000000){
arr[++front]=num;
}
else{
arr[--rear]=num;
}
}
public static int peek(int[] arr){
return arr[front];
}
}
배열 중간에 front와 rear을 둬서 추가되면 rear을 하나 줄였고 삭제되면 front를 하나 줄였다.
한번쯤 경험삼아 구현했지만 Stack<Integer> stack = new Stack<>() 처럼 내장 자료구조로 쓰자.
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Queue<Integer> myQueue = new LinkedList<>();
for(int i=1; i<=N; i++){
myQueue.add(i);
}
while(myQueue.size()>1){
myQueue.poll();
myQueue.add(myQueue.poll());
}
System.out.println(myQueue.peek());
}
}