문제를 읽어보니 큐 자료구조의 선입선출 성질을 활용하여 간단하게 구현할 수 있는 문제였다.
문제의 시간 제한(2초)과 데이터의 크기(1 ≤ N ≤ 500000)를 보니 시간 복잡도의 제약도 크지 않은 단순한 문제였다.
QueueCardGame.java
package com.example.Etc;
import java.util.LinkedList;
import java.util.Queue;
/**
* 카드게임2
* 1. 큐의 front 삭제
* 2. 다음 원소를 삭제 후 맨 뒤에 삽입
* 3. 큐에 하나의 원소만 남아있을 경우 해당 원소 리턴
*/
public class QueueCardGame {
public int printLastCard(int queueSize) {
Queue<Integer> queue = new LinkedList<>();
// 카드 생성
for(int i = 1; i <= queueSize; i++) {
queue.add(i);
}
while(queue.size() != 1) {
// 제일 상단의 카드 제거
queue.poll();
int front = queue.poll();
queue.add(front);
}
return queue.peek();
}
}
QueueCardGameTest.java
ppackage com.example.Etc;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class QueueCardGameTest {
@Test
public void queueCardGameTest() {
QueueCardGame cardGame = new QueueCardGame();
int result = cardGame.printLastCard(6);
assertEquals(4, result);
}
}