본문 바로가기

백준 문제풀기/JAVA

[백준 2164 JAVA 자바] 카드2

1. 제일 위에 있는 카드를 버린다

2. 그다음 제일 위에 있는 카드를 가장 아래로 옮긴다

결국 카드는 1장이 빠지게됩니다

 

이 과정을 카드가 1장이 남을 때까지 반복합시다

 

카드는 맨 앞에서만 꺼내고

카드는 맨 뒤에서만 넣으니

큐를 이용합시다

 

큐는 그림처럼

출구와 입구가 정해진 자료 구조입니다

앞에 있는걸 꺼내고

뒤에 새로운걸 넣을 때 유용합니다

 

1. 카드가 1개일경우는 그냥 끝냅니다

2. 큐에서 꺼내서 버리기, 큐에서 꺼내서 다시넣기를 반복합시다

3. 큐의 사이즈가 1이라면 break;

 

 

코드입니다

 

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		
		Deque<Integer> q = new LinkedList<>();
		
		int N = scan.nextInt();
		
		if (N==1) {
			System.out.println(1);
			return ;
		}
		
		for(int i=1;i<=N;i++) {
			q.addLast(i);
		}
		
		while(true) {
			q.pollFirst();
			q.addLast(q.pollFirst());
			
			if (q.size()==1) break;
		}
		System.out.println(q.pollFirst());
	}
}

 

q.addLast()는 큐에 넣는 동작입니다

last =  마지막에 쌓이게 됩니다

 

q.pollFirst()는 큐에서 꺼내는 동작입니다

First = 처음꺼를 꺼냅니다