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 + ">"); // ์ต์ข
์์ธํธ์ค ์์ด ์ถ๋ ฅ
}
}'๐ท์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
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 + ">"); // ์ต์ข
์์ธํธ์ค ์์ด ์ถ๋ ฅ } }