๐ก๋ฌธ์ ๋ถ์ ์์ฝ
- ๋ฌธ์ ์ค๋ช
n
๋ช
์ ์ฌ๋์ด ์ํ์ผ๋ก ์์ ์์ผ๋ฉฐ, k
๋ฒ์งธ ์ฌ๋์ ์์๋๋ก ์ ๊ฑฐ
- ์ ๊ฑฐ๋ ์ฌ๋์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ต์ข
์ ์ผ๋ก ์ ๊ฑฐ๋๋ ์์๋ฅผ ๊ตฌํด์ผ ํจ
- ์ถ๋ ฅ ํ์
- ์ ๊ฑฐ๋ ์ฌ๋์ ์์๋ฅผ
<x1, x2, x3, ..., xm>
ํ์์ผ๋ก ์ถ๋ ฅ
๐ก์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ
- ๊ตฌํ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํ ๊ธฐ๋ฅ์ ๊ตฌํ
- ํ ์ด๊ธฐํ:
- 1๋ถํฐ
n
๊น์ง์ ์ซ์๋ฅผ ํ์ ๋ฃ์
- ์ ๊ฑฐ ๊ณผ์ :
- ํ์ฌ ํ์ ๊ธธ์ด๊ฐ 0์ด ์๋ ๋๊น์ง ๋ฐ๋ณต
k
๋งํผ ํ์์ ์์๋ฅผ ๊บผ๋ด๊ณ ๋ค์ ํ์ ๋ค์ ์ถ๊ฐ (์ฌ๋์ ์ํ์ํค๋ ๊ณผ์ )
k
๋ฒ์งธ ์ฌ๋์ ์ ๊ฑฐํ์ฌ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ถ๊ฐ
- ๊ฒฐ๊ณผ ์ถ๋ ฅ
- ์ต์ข
์ ์ผ๋ก ์ ์ฅ๋ ์ ๊ฑฐ ์์๋ฅผ ์๊ตฌ๋๋ ํ์์ผ๋ก ์ถ๋ ฅ
๐ก์ฝ๋
const fs = require('fs');
const path = require('path');
const input = fs.readFileSync(path.join(__dirname, 'input.txt')).toString().trim().split(' ');
// ์
๋ ฅ๊ฐ์ ์ซ์๋ก ๋ณํ
const n = parseInt(input[0], 10); // ์ด ์ธ์
const k = parseInt(input[1], 10); // ์ ๊ฑฐํ ์ฌ๋์ ์์
function solution(n, k) {
const queue = []; // ์ด ์ธ์ ๋ฐฐ์ด
const answer = []; // ์ ๊ฑฐ ์์ ๋ฐฐ์ด
// ์ด ์ธ์์ ์ด ์ธ์ ๋ฐฐ์ด์ ๋ฃ์
for (let i = 1; i <= n; i++) {
queue.push(i);
}
// ์ ๊ฑฐ ์์ ์นด์ดํฐ
let count = 1;
while (queue.length) {
const shiftItem = queue.shift();
// ํ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๊บผ๋
if (count % k === 0) {
// ํ์ฌ ์นด์ดํฐ === ์ ๊ฑฐ ์์๋ผ๋ฉด
answer.push(shiftItem);
// k๋ฒ์งธ ์ฌ๋์ ์ ๊ฑฐ ์์ ๋ฐฐ์ด์ ์ถ๊ฐ
} else {
queue.push(shiftItem);
// k๋ฒ์งธ๊ฐ ์๋ ์ฌ๋์ ๋ค์ ์ด ์ธ์ ๋ฐฐ์ด์ ๋์ ์ถ๊ฐ
}
count++;
// ์นด์ดํฐ ์ฆ๊ฐ
}
// ํ์๋๋ก ์ถ๋ ฅ
console.log(`<${answer.join(', ')}>`);
}
// ๋ฌธ์ ํ์ด ํจ์ ์คํ
solution(n, k);
๐ก์๊ฐ๋ณต์ก๋
- ์๊ฐ ๋ณต์ก๋: O(n * k)
n
๋ช
์ ์ฌ๋์ ๋ํด k
๋ฒ ๋ฐ๋ณตํ๋ฉฐ, ํ์์์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ O(1)์ธ ๊ฒฝ์ฐ์๋ ์ ์ฒด์ ์ผ๋ก O(n * k)๊ฐ ๊ฑธ๋ฆผ
- ๊ณต๊ฐ ๋ณต์ก๋: O(n)
- ํ์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ ์ฅํ๊ธฐ ์ํ ๊ณต๊ฐ์ด ํ์ํจ