T_era

[JAVA] 백준 2164 : 카드2 (배열Queue) 본문

Programing/BaekJoon

[JAVA] 백준 2164 : 카드2 (배열Queue)

블스뜸 2025. 3. 30. 18:17

배열로 Queue를 구현해 작성해봤다.
하지만 시간초과로 나와서 원인을 찾아보니 배열로 만든 큐는 pop연산을 할때 비효율적이라 linked List를 사용해보라는 추천을 받았다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        ArrayQueue queue = new ArrayQueue();

        int num = Integer.parseInt(br.readLine());
        for(int i = 1; i <= num; i++){
            queue.queuePush(i);
        }

        while (queue.queueSize() != 1){
            queue.queuePop();
            queue.queuePush(queue.queuePop());
        }

        bw.write(String.valueOf(queue.queuePick()));

        bw.flush();
        bw.close();
        br.close();
    }

}
// 1. queue의 공백을 확인
// 2. queue가 가득 찼는지 확인
// 3. queue의 데이터의 갯수 확인
// 4. 선택
// 5. push
// 6. pull
class ArrayQueue{
    final int MAX = 500000;
    int first;
    int last;
    int[] queue;
    public ArrayQueue(){
        first = 0;
        last = 0;
        queue = new int[MAX];
    }
    public boolean queueEmpty(){
        return first == last;
    }
    public boolean queueFull(){
        if(last == MAX) return true;
        else return false;
    }
    public int queueSize(){
        return last - first;
    }
    public int queuePick(){
        if(queueEmpty()) return -1;
        return queue[first];
    }
    public void queuePush(int item){
        if(queueFull()) return;
        queue[last++] = item;
    }
    public int queuePop(){
        if(queueEmpty()) return -1;
        return queue[first++];
    }
}