https://www.acmicpc.net/problem/11866
๐ ํ์ด : ์ฐ๊ฒฐ๋ฆฌ์คํธ(LinkedList)๋ก ์ํ ํ(CircularQueue) ๊ตฌํ
- ํต์ฌ ์ฝ๋ : `queue.offer(queue.poll())`
- `offer()`์ `poll()` ๋ฉ์๋๋ฅผ ์กฐํฉํ์ฌ ํ์ ์์์ ์ ๊ฑฐํ ์์๋ฅผ ๋ค์ ๋ค๋ก ๋ณด๋ด๋ ๊ณผ์ ์ ๋ฐ๋ณตํจ์ผ๋ก์จ, ํ๊ฐ ์ํ์ผ๋ก ๋์ํ๋ ๊ฒ์ฒ๋ผ ๊ตฌํํ ์ ์๋ค.
import java.io.*;
import java.util.*;
import java.util.stream.*;
public class Main {
// (N, K)-์์ธํธ์ค ์์ด ์ถ๋ ฅ(์์์ ์ฌ๋๋ค์ด ์ ๊ฑฐ๋๋ ์์)
public static void main(String[] args) throws IOException {
/* [1] ์
๋ ฅ */
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // ์ฌ๋์ ์ N
int K = Integer.parseInt(st.nextToken()); // ์ ๊ฑฐ๋ ์์ K
/* [2] ํ ์์ฑ ํ ๊ฐ ์ฑ์ฐ๊ธฐ */
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= N; i++) {
queue.add(i);
}
/* [3] K๋ฒ์งธ ์ฌ๋ ์ ๊ฑฐ */
List<Integer> list = new ArrayList<>(); // ์ ๊ฑฐ๋ ์ฌ๋๋ค ์ ์ฅ(์์ธํธ์ค ์์ด)
while (!queue.isEmpty()) {
for (int i = 1; i < K; i++) {
queue.offer(queue.poll()); // K๋ฒ์งธ ์ ๊น์ง์ ์ฌ๋๋ค์ ํ์ ๋ค๋ก ๋ณด๋โญ
}
list.add(queue.poll()); // K๋ฒ์งธ ์ฌ๋์ ์ ๊ฑฐํ๊ณ ๋ฆฌ์คํธ์ ์ถ๊ฐโญ
}
/* [4] ๊ฒฐ๊ณผ ์ถ๋ ฅ */
String str = list.stream()
.map(String::valueOf) // String ๋ณํ
.collect(Collectors.joining(", ")); // ","๋ก ๊ตฌ๋ถํ์ฌ ๋ฌธ์์ด๋ก ๊ฒฐํฉ
System.out.println("<" + str + ">"); // ์ต์ข
์์ธํธ์ค ์์ด ์ถ๋ ฅ
}
}