https://www.acmicpc.net/problem/2164
2164번: 카드2
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가
www.acmicpc.net
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 |