알고리즘 문제풀이/백준

[백준 2164] 카드2

선서니 2023. 2. 10. 15:53

[문제 바로가기]

 

2164번: 카드2

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

www.acmicpc.net

 

 

 

💡풀이💡

카드의 순서를 위와 아래 두 입구에서 넣고 빼고를 하기 때문에 ArrayDeque를 사용!

이때 ArrayDeque의 앞을 카드의 위, 뒤를 카드의 아래라고 생각하고 구현

 

 

1. 입력 값 저장

N을 입력 받아 1~N까지 순서대로 ArrayDeque에 저장

int N = Integer.parseInt(br.readLine());
ArrayDeque<Integer> q = new ArrayDeque<>();
		
for(int i=1; i<=N; i++) {
	q.offerLast(i);
}

 

2. 카드 순서 바꾸기

카드가 1장 남을 때까지 반복하기 때문에 ArrayDeque의 크기가 1보다 클 때까지 반복

  1. ArrayDeque 제일 앞의 요소 빼기
  2. 제일 앞의 요소를 제일 뒤로 옮기기

반복문을 빠져 나오면 한 장만 남기 때문에 남은 한 장을 출력

while(q.size() > 1) {
	q.pollFirst(); // 1번
	q.offerLast(q.pollFirst()); // 2번
}

 

 

전체 코드

import java.io.*;
import java.util.*;

public class B2164 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		ArrayDeque<Integer> q = new ArrayDeque<>();
		
		for(int i=1; i<=N; i++) {
			q.offerLast(i);
		}
		
		while(q.size() > 1) {
			q.pollFirst();
			q.offerLast(q.pollFirst());
		}
		System.out.println(q.poll());
	}
}