
접근법
N 장의 카드가 있다. 1번 카드가 제일 위에 N 번 카드는 제일 아래이다.
제일 위의 카드를 버리고, 그 다음 제일 위에 있는 카드를 제일 아래로 옮긴다.
큐를 사용하여 풀이가 가능하다.
제일 먼저 입력된 수 를 지우고, 그 다음 수를 지운 뒤 마지막 index 에 저장한다.
입력된 N 개 만큼 for 문 안에서
offer
로 저장을 하여 1부터 시작되는 리스트를 만든다.
그 후 StringBuilder
에 첫번째 값을 저장하고 새롭게 가장 앞쪽에 오게된 원소를 뒤로 보낸다. 풀이
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
Queue<Integer> queue = new LinkedList<>();
// 입력받은 N 개 만큼의 카드를 queue 에 저장
for(int m =1; m<=N ; m++) {
queue.offer(m);
}
StringBuilder sb = new StringBuilder();
while(!queue.isEmpty()) {
// 첫번째 데이터를 저장 이때 poll 은 값을 반환한 뒤 제거한다.
sb.append(queue.poll()).append(" ");
if(!queue.isEmpty()) {
// 새롭게 첫번째 오게된 값을 queue 리스트에 저장
queue.offer(queue.poll());
}
}
System.out.println(sb.toString().trim());
}catch (Exception e) {
// TODO: handle exception
}
}
}
Share article