문제 출처 : https://www.acmicpc.net/problem/2164
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 카드게임 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 1. 값 세팅
int N = sc.nextInt();
Queue<Integer> queue = new LinkedList<Integer>();
// 2. 큐에 값 삽입
for (int i=1; i<= N; i++){
queue.offer(i);
}
// 3. 카드게임 돌리기
while (queue.size()>1){ // 큐에 값이 하나만 남을 때 까지 반복
queue.poll(); // 첫 번째 카드 버림
queue.offer(queue.poll()); // 두번째 카드 맨 뒤로 넣기
}
System.out.println(queue.peek()); // 큐의 맨 마지막 값 꺼내 출력
}
}
큐! Queue!
이전에 풀던 문제들 보단 조금 쉬운 느낌이었다. 큐를 알면 금방 풀 수 있을 것 같다. 그리고 이 문제를 풀면서 알게 된건데 다른 사람들의 풀이에서 누구는 .add()를 누구는 .offer()를 쓰길래 찾아보니 que에 값을 삽입, 추출, 삭제 할 때 메소드가 두 개씩 존재한다는 것을 알았다. 궁금해서 공식문서를 찾아봤는데 '작업 실패 시 반환하는 값'을 기준으로 예외를 발생시키는 메소드와 특별한 값을 반환하는 메소드로 나뉘더라. 이렇게 새로 알게된 내용은 따로 큐 포스팅에서 정리해 봐야겠다.
뛰어난 글이네요, 감사합니다.