import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()); // 한 줄에서 숫자 2개를 분리하기 위한 tokenizer
StringBuilder sb = new StringBuilder(); // 결과 출력을 위한 string builder
sb.append("<");
int n = Integer.parseInt(st.nextToken()); // n명의 사람
int k = Integer.parseInt(st.nextToken()); // k번째를 제거
/* Queue 선언 */
Queue<Integer> queue = new LinkedList<>();
/* queue에 1~n 값 넣기 */
for (int i = 1; i <= n; i++) {
queue.add(i);
}
/* k번째 값이 될 때까지 값을 뺐다가 맨 뒤에 다시 넣고, k번째에는 값을 poll해서 sb에 저장 */
while (queue.size() > 1) {
for (int i = 1; i < k; i++) {
int temp = queue.poll();
queue.add(temp);
}
sb.append(queue.poll()).append(", ");
}
sb.append(queue.poll());
sb.append(">");
System.out.println(sb);
}
}
이 문제는 Queue를 사용해서 해결할 수 있다.
k번째 숫자가 나올 때까지 맨 앞의 값을 빼서 맨 뒤로 넣는다.
k번째 숫자가 나왔을 때 그 값을 poll해서 저장한다.
이런 식으로 반복하다 보면 모든 값을 꺼낼 수 있게 된다.
추가적으로 출력 서식에 맞추기 위해 마지막 값은 while문이 끝난 뒤에 poll한 뒤 저장했다.
BufferedReader를 사용할 때, 한 줄에서 두 개 이상의 값을 받아야 한다면 StringTokenizer을 사용해야 한다는 것을 잊지 말자 !!!
'JAVA' 카테고리의 다른 글
[JAVA][백준] 1676_팩토리얼 0의 개수 (0) | 2024.04.23 |
---|---|
[JAVA][백준] 7568_덩치 (0) | 2024.04.22 |
[JAVA][백준] 2751_수 정렬하기 2 (0) | 2024.04.18 |
[JAVA][백준] 1181_단어정렬 (Comparator) (1) | 2024.04.18 |
[JAVA][백준] 10989_수 정렬하기 3 (BufferedReader) (0) | 2024.04.16 |