sm 기술 블로그

158. 2164(카드2) - 자바 본문

문제/백준_자바

158. 2164(카드2) - 자바

sm_hope 2022. 7. 26. 14:11
import java.util.*;
import java.io.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Deque<Integer> queue = new ArrayDeque<>();

		int N = sc.nextInt();
		for (int i = 1; i <= N; i++) {
			queue.add(i);
		}
		
		while(queue.size() != 1) {
			queue.poll();
			queue.add(queue.poll());
		}
		
		System.out.println(queue.poll());
	}
}

문제요약

N장의 카드가 있는데 제일 위의 카드는 버리고 버리고 난 뒤 제일 위의 카드를 맨아래로 보내는 식으로 한장의 카드가 남을 때 까지 반복한다.

설명

큐를 이용한 쉬운 문제이다.

 

여기서 제일 위는 제일 앞을 뜻하므로 큐를 이용한다.

		for (int i = 1; i <= N; i++) {
			queue.add(i);
		}

1~N까지의 카드를 큐에 저장한다.

 

		while(queue.size() != 1) {
			queue.poll();
			queue.add(queue.poll());
		}

 카드가 한 장일 때까지 반복하며,

1. 제일 위의 카드는 버린다 (queue.poll())

2. 버린 상태에서 제일 위의 카드를 제일 아래로 보낸다. (queue.add(queue.poll()))

 

		System.out.println(queue.poll());

마지막으로 한 장 있는 카드를 poll()을 통해 출력한다.

'문제 > 백준_자바' 카테고리의 다른 글

160. 1966(프린트 큐) - 자바  (0) 2022.07.26
159. 11866(요세푸스 문제 0) - 자바  (0) 2022.07.26
157. 18258(큐) - 자바  (0) 2022.07.25
156. 17298(오큰수) - 자바  (0) 2022.07.25
155. 1874(스택 수열) - 자바  (0) 2022.07.22
Comments