
내가 생각했을때 문제에서 원하는부분
첫째 줄에 정수 N(1 ≤ N ≤ 1,000)이 주어진다.
첫째 줄에 버리는 카드들을 순서대로 출력한다.
제일 마지막에는 남게 되는 카드의 번호를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 빠르게 입력한다.
큐 초기화: LinkedList를 사용하여 1부터 N까지의 카드 번호를 큐에 추가한다.
카드 처리: 큐의 크기가 1보다 클 때까지 반복하여 제일 위 카드를 버리고, 다음 제일 위 카드를 제일 아래로 이동한다.
출력: 버린 카드와 마지막 남은 카드를 StringBuilder에 추가하여 최종적으로 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
// 백준 2161번 문제
public class Main955 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
Queue<Integer> queue = new LinkedList<>();
for(int i = 1; i <= N; i++) { // 카드 초기화
queue.offer(i);
}
while(queue.size() > 1) { // 카드 처리
sb.append(queue.poll()).append(" "); // 제일 위 카드 버리기
queue.offer(queue.poll()); // 제일 위 카드를 제일 아래로 이동
}
sb.append(queue.poll()); // 마지막 남은 카드
System.out.println(sb.toString()); // 결과 출력
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.