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 = 처음꺼를 꺼냅니다
'백준 문제풀기 > JAVA' 카테고리의 다른 글
[백준 2217 JAVA 자바] 로프 (0) | 2023.07.31 |
---|---|
[백준 2204 JAVA 자바] 도비의 난독증 테스트 (0) | 2023.07.31 |
[백준 2108 JAVA 자바] 통계학 (0) | 2023.07.31 |
[백준 1009 JAVA 자바] 분산처리 (0) | 2023.07.31 |
[백준 1978 JAVA 자바] 소수 찾기 (0) | 2023.07.31 |