๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 1158๋ฒ ์์ธํธ์ค ๋ฌธ์ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
ํด๊ฒฐ๋ฒ
์ด ๋ฌธ์ ๋ ํ ์๋ฃ๊ตฌ์กฐ๋ก ํด๊ฒฐํ ์ ์๋ ๋ํ์ ์ธ ๋ฌธ์ ๊ฒฉ์ด๋ค.
๋ฌธ์ ๋ ์ด๋ ๋ค.
1 ~ N ๊น์ง ์๋ฅผ 1์๋ก ๋์ฌ๋๋๋ค.
N = 7
1, 2, 3, 4, 5, 6, 7
๊ทธ๋ฆฌ๊ณ ํฌ์ธํฐ๋ฅผ K๋งํผ ์์ง์ธ ์๋ฅผ ์ถ๋ ฅํ๊ณ ํด๋น ๋ฆฌ์คํธ์์ ์ ์ธ์ํจ๋ค.
์ด ๊ณผ์ ์ ๋ฆฌ์คํธ์ ์์๊ฐ ์์ ๋ ๊น์ง ๋ฐ๋ณตํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ํํ์ด๋ค.
N = 7, K = 3
Rount 1
=> 1, 2, 3, 4, 5, 6, 7
=> -
=> return => 3,
Rount 2
=> 1, 2, 4, 5, 6, 7
=> -
=> return => 3, 6
Rount 3
=> 1, 2, 4, 5, 7
=> -
=> return => 3, 6, 2
Rount 4
=> 1, 4, 5, 7
=> -
=> return => 3, 6, 2, 7
Rount 5
=> 1, 4, 5
=> -
=> return => 3, 6, 2, 7, 5
Rount 6
=> 1, 4
=> -
=> return => 3, 6, 2, 7, 5, 1
Rount 7
=> 4
=> -
=> return => 3, 6, 2, 7, 5, 1, 4
Rount 8
=> Empty
=>
=> return => 3, 6, 2, 7, 5, 1, 4
์ ๊ทผ๋ฒ
์ด ๋ฌธ์ ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ํ ์๋ฃ๊ตฌ์กฐ
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํด๊ฒฐ
์ฌ์ค ์ด ๋ฌธ์ ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํด๊ฒฐํ๊ธฐ๋ณด๋ค, ํ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด ํจ์ฌ ๋ ํธํ๋ค.
๊ทธ ์ด์ ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ฐ๋ฆฌ๋ ํ์ ๋น์ทํ ๋์์ ํ๊ฒ ๋ง๋ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ์ n์ด ๋ค์ด์ค๋ฉด n๊ธธ์ด๋ฅผ ๊ฐ๋ ์ ๋ต ๋ฐฐ์ด์ ๋ง๋ค๊ณ , k๋ฒ์งธ ์๋ 1 ~ n ๊น์ง ๋ฐฐ์ด์ k๋ฒ ๋๋ฉฐ 0๋ฒ์งธ ์ธ๋ฑ์ค์ ์๋ ๋ฆฌ์คํธ ๋ ธ๋์ ๊ฐ์ ์ถ๋ ฅํ๋๋ก ํ๋ค.
์ด ๊ณผ์ ์ n๋ฒ ๋ฐ๋ณตํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์์ธํธ์ค ์์ด์ด ํ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
private static int[] solveByLinkedList(int n, int k) {
List<Integer> list = new LinkedList<>();
int[] answer = new int[n];
k -= 1; // k ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๊ธฐ ์ํด -1
for (int i = 0; i < n; i++) {
list.add(i + 1); // 1 ~ n ์ผ๋ก ๊ตฌ์ฑ๋ ์์ด ์ด๊ธฐํ
}
for (int i = 0; i < n; i++) {
int loop = k; // k๋งํผ ๋ฐ๋ณต์ ์ํด ๋ฐ๋ณต ๋ณ์ ์ค์
while(loop-- > 0) {
list.add(list.remove(0)); // k๋ฒ์งธ๊ฐ ์๋ ์๋ค์ ๋ค์ ๋ฆฌ์คํธ ๋์ผ๋ก ์ด๋
}
answer[i] = list.remove(0); // k๋ฒ์งธ ์๋ ์ ๋ต ๋ฐฐ์ด์ ์ถ๊ฐ
}
return answer;
}
ํ ์๋ฃ๊ตฌ์กฐ๋ก ํด๊ฒฐ
ํ๋ก ํด๊ฒฐํ๋ ๋ ผ๋ฆฌ๋ ์์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํด๊ฒฐํ๋ ค๋ ๋ ผ๋ฆฌ์ ๊ฐ๋ค.
ํ์ง๋ง ๋ค๋ฅธ์ ์ด ํ๋ ์๋ค๋ฉด, ์๋ฃ ๊ตฌ์กฐ๋ง ๋ฌ๋ผ์ก๋ค๋ ๊ฒ์ด๋ค.
private static int[] solveByQueue(int n, int k) {
Queue<Integer> queue = new LinkedList<>();
int[] answer = new int[n];
for (int i = 0; i < n; i++) {
queue.add(i + 1);
}
int index = 0;
while(!queue.isEmpty()) {
for (int i = 0; i < k-1; i++) {
int value = queue.remove();
queue.add(value);
}
answer[index] = queue.remove();
index++;
}
return answer;
}
์ค๋ต ํ๋ณด
์ ๋ต ์ฝ๋
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));
String[] nk = br.readLine().split(" ");
int n = Integer.parseInt(nk[0]);
int k = Integer.parseInt(nk[1]);
int[] answer = solveByQueue(n, k);
if(n == 1 && k == 1) {
bw.write("<" + answer[0] + ">");
}else {
bw.write("<" + answer[0]);
for (int i = 1; i < answer.length - 1; i++) {
bw.write(", " + answer[i]);
}
bw.write(", " + answer[answer.length-1] + ">");
}
bw.flush();
bw.close();
}
private static int[] solveByLinkedList(int n, int k) {
List<Integer> list = new LinkedList<>();
int[] answer = new int[n];
k -= 1;
for (int i = 0; i < n; i++) {
list.add(i + 1);
}
for (int i = 0; i < n; i++) {
int loop = k;
while(loop-- > 0) {
list.add(list.remove(0));
}
answer[i] = list.remove(0);
}
return answer;
}
private static int[] solveByQueue(int n, int k) {
Queue<Integer> queue = new LinkedList<>();
int[] answer = new int[n];
for (int i = 0; i < n; i++) {
queue.add(i + 1);
}
int index = 0;
while(!queue.isEmpty()) {
for (int i = 0; i < k-1; i++) {
int value = queue.remove();
queue.add(value);
}
answer[index] = queue.remove();
index++;
}
return answer;
}
}
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๋ ํ์ด ๋ฐฉ๋ฒ ๋ชจ๋ ํต๊ณผํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋๊ธ