본문 바로가기

Problem Solving

백준 2164 카드2 - Java 자바 문제 풀이

문제 해설

맨 위의 카드를 제거하고, 새로운 맨 위의 카드를 맨 아래로 삽입하면 됩니다. 카드의 제거가 위쪽, 카드의 삽입이 아래쪽에서 이뤄지므로 큐 자료구조를 활용할 수 있습니다.

 

문제 풀이 계획

필요 변수

변수명 타입 초기값 설명
q Queue<Integer>  
N int   카드 갯수

 

해결 로직

  1. N을 입력 받는다.
  2. queue에 차례대로 1부터 N까지 삽입한다.
  3. queue 사이즈가 1이 될 때 까지 다음을 반복한다.
    1. 맨 위의 카드를 제거한다.
    2. 맨 위의 카드를 제거하고 다시 맨 아래에 삽입한다.
  4. 마지막으로 남은 숫자를 출력한다.

 

풀이 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
	
	public static Queue<Integer> q;
	public static int N;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine()); // 1. N을 입력 받는다.
		q = new LinkedList<Integer>();
		
		for(int i=1; i<=N; i++) { // 2. 큐에 1부터 N까지 삽입한다.
			q.add(i);
		}
		
		while(q.size() != 1) { // 3. 큐에 원소가 하나만 남을 때까지 아래를 반복한다.
			q.poll();
			q.add(q.poll());
		}
		
		System.out.println(q.peek()); // 4. 마지막 남은 원소를 출력한다.
	}
}

 

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net