본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 2164번] 카드2(자바)

by 테크케찰 2020. 7. 31.

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()) 함수를 이용했습니다.

각 작업 사이사이에 마지막 카드가 남았을 때 종료하도록 코드를 작성했습니다.