문제 내용을 요약해보자면 입력 값을 받으면 1 부터 입력 값까지 나열한 후, (1이 맨 앞, 입력 값이 맨 뒤) 앞에서부터 카드를 뽑기 시작하되 처음에는 그냥 뽑고, 그 다음에는 뽑아서 맨 뒤로 보내고, 이후에는 그냥 뽑는 것을 반복해서 뽑힌 카드의 값들을 반납하는 식인데
입력 값으로 4를 받았으면 1,2,3,4 이런 수를 가지게 되는 것이고, 1뽑고 2뒤로 넘겨서 3,4,2 만들고 3 뽑고, 4 넘겨서 … 출력은 1, 3, 2, 4를 출력해주면 된다는 거다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
Queue<Integer> queue = new ArrayDeque<>();
for (int i = 1; i <= count; i++) {
queue.add(i);
}
int[] arr = new int[queue.size()];
boolean status = true;
int i = 0;
while (queue.size() > 0) {
if (status) {
arr[i] = queue.poll();
status = false;
i++;
} else {
queue.add(queue.poll());
status = true;
}
}
String ans = "";
for (int j = 0; j < arr.length; j++) {
if (j == arr.length - 1) {
ans += arr[j];
} else {
ans += arr[j] + " ";
}
}
System.out.println(ans);
}
}
문제를 풀어보자면 Queue에다가 값을 넣어주면 순서대로 저장이 되고, 이후 Queue가 빌때까지 반복문을 돌리면서, 처음 수는 뽑아 배열에 저장하고 다음 수는 뒤로 넘기고.. 이런 식으로 배열을 채운 뒤, 배열을 String 출력 구조로 변환해서 반환해주면 끝이다.
주의할 점은 출력 시 마지막 값에 띄어쓰기가 들어가면 안된다는 것을 유의하자.
Leave a Reply