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++];
}
}