📃 제출
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuffer sb = new StringBuffer();
Queue<Integer> queue = new LinkedList<>();
String[] NK = br.readLine().split(" ");
for (int i = 0; i < Integer.parseInt(NK[0]); i++) {
queue.offer(i+1);
}
ArrayList<Integer> list = new ArrayList<>();
int index = 1;
while (!queue.isEmpty()) {
if (index == Integer.parseInt(NK[1])) {
list.add(queue.poll());
index = 1;
}else {
queue.add(queue.poll());
index++;
}
}
sb.append("<");
for (int i = 0; i < list.size(); i++) {
if (i == list.size() - 1) {
sb.append(list.get(i));
}else {
sb.append(list.get(i)).append(", ");
}
}
sb.append(">");
bw.write(sb.toString());
bw.flush();
br.close();
bw.close();
}
}
✏ 풀이
while 문을 통해 큐가 비어있지 않을 때까지 반복하면서 index 값을 증가시키며 K와 같은지 비교합니다. 만약 K와 같다면 큐의 원소를 리스트에 추가하고, index를 다시 1로 초기화합니다. 만약 같지 않다면, 큐의 원소를 뒤로 보내어 계속 반복하는 방식으로 문제를 해결하였습니다.
코드 리팩토링
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder result = new StringBuilder();
String[] input = reader.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int k = Integer.parseInt(input[1]);
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= n; i++) {
queue.offer(i);
}
ArrayList<Integer> sequence = new ArrayList<>();
while (!queue.isEmpty()) {
for (int i = 0; i < k - 1; i++) {
queue.offer(queue.poll());
}
sequence.add(queue.poll());
}
result.append("<");
for (int i = 0; i < sequence.size(); i++) {
result.append(sequence.get(i));
if (i < sequence.size() - 1) {
result.append(", ");
}
}
result.append(">");
writer.write(result.toString());
writer.flush();
reader.close();
writer.close();
}
}
'PS > 백준' 카테고리의 다른 글
[백준 | 15649] N과 M(1) - Java (0) | 2024.08.14 |
---|---|
[백준 | 1966] 프린터 큐 - Java (0) | 2024.08.11 |
[백준 | 10867] 중복 뺴고 정렬하기- Java (0) | 2024.08.09 |
[백준 | 1026] 보물 - Java (0) | 2024.08.09 |
[백준 | 10815] 숫자 카드 - Java (0) | 2024.08.08 |