https://www.acmicpc.net/problem/2164
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
public static void main(String args[]) throws Exception {
Deque<Integer> q=new LinkedList<>();
int n=Integer.parseInt(br.readLine());
for(int i=n;i>=1;i--) {
q.offer(i);
}
while(true) {
if(q.size()==1) {
System.out.println(q.poll());
break;
}
q.pollLast();
if(q.size()==1) {
System.out.println(q.poll());
break;
}
q.offerFirst(q.pollLast());
}
}
}
이 문제는 덱 클래스를 이용하면 어렵지 않게 풀 수 있습니다.
먼저 n값을 받고, n부터 1까지 차례대로 덱에 삽입해줍니다.
그 이후, 맨 위의 카드를 제거하는 pollLast() 함수를 호출하고, 그 이후, 맨 위의 카드를 제거해서 리턴하고, 리턴한 값을 카드의 맨 아래에 삽입하도록 offerFirst(q.pollLast()) 함수를 이용했습니다.
각 작업 사이사이에 마지막 카드가 남았을 때 종료하도록 코드를 작성했습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 1932번] 정수 삼각형(JAVA) (0) | 2020.08.02 |
---|---|
[BOJ 1966번] 프린터 큐(JAVA) (0) | 2020.08.02 |
[BOJ 18258번] 큐 2(JAVA) (0) | 2020.07.31 |
[BOJ 9012번] 괄호(JAVA) (0) | 2020.07.29 |
[BOJ 1874번] 스택 수열(Java) (0) | 2020.07.24 |