Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

[24/11/03] 큐 본문

카테고리 없음

[24/11/03] 큐

성추 2024. 11. 3. 22:56

2164

누가봐도 큐 문제니까 문제 해설은 하지 않겠다.

 

미친척하고 깡으로 큐 구현한건 아래와 같다.

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());

    }
}