์ ๋ณด ์๊ตญ์ ์ด์ ๋๋ผ ์ธ๋๋ธ ๊ณต์ฃผ๊ฐ ์ฒ์์ ๊ดด๋ฌผ์๊ฒ ์กํ๊ฐ๋ค.
์ ๋ณด ์๊ตญ์๋ ์์๊ฐ N๋ช
์ด ์๋๋ฐ ์๋ก ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ๊ฒ ๋ค๊ณ ํ๋ค.
์ ๋ณด์๊ตญ์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์์๋ฅผ ๊ฒฐ์ ํ๊ธฐ๋ก ํ๋ค.
์์ ์์๋ค์ ๋์ด ์์ผ๋ก 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ์ฐจ๋ก๋ก ๋ฒํธ๋ฅผ ๋งค๊ธด๋ค.
๊ทธ๋ฆฌ๊ณ 1๋ฒ ์์๋ถํฐ N๋ฒ ์์๊น์ง ์์๋๋ก ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ฉฐ ๋๊ทธ๋๊ฒ ์๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ 1๋ฒ ์์๋ถํฐ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ฉฐ 1๋ถํฐ ์์ํ์ฌ ๋ฒํธ๋ฅผ ์ธ์น๊ฒ ํ๋ค.
ํ ์์๊ฐ K(ํน์ ์ซ์)๋ฅผ ์ธ์น๋ฉด ๊ทธ ์์๋ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ๋๋ฐ์ ์ ์ธ๋๊ณ ์ ๋ฐ์ผ๋ก ๋์ค๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์์๋ถํฐ ๋ค์ 1๋ถํฐ ์์ํ์ฌ ๋ฒํธ๋ฅผ ์ธ์น๋ค.
์ด๋ ๊ฒ ํด์ ๋ง์ง๋ง๊น์ง ๋จ์ ์์๊ฐ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ด 8๋ช
์ ์์๊ฐ ์๊ณ , 3์ ์ธ์น ์์๊ฐ ์ ์ธ๋๋ค๊ณ ํ์.
์ฒ์์๋ 3๋ฒ ์์๊ฐ 3์ ์ธ์ณ ์ ์ธ๋๋ค.
์ด์ด 6, 1, 5, 2, 8, 4๋ฒ ์์๊ฐ ์ฐจ๋ก๋๋ก ์ ์ธ๋๊ณ ๋ง์ง๋ง๊น์ง ๋จ๊ฒ ๋ 7๋ฒ ์์์๊ฒ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ๋ค.
N๊ณผ K๊ฐ ์ฃผ์ด์ง ๋ ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
const solution = (n, k) => {
let answer = 0;
let queue = Array.from({ length: n }, (v, i) => i + 1);
while (queue.length) {
for (let i = 1; i < k; i++) {
queue.push(queue.shift());
}
queue.shift();
if (queue.length === 1) answer = queue.shift();
}
}
};
console.log(solution(8, 3));
ํ์ ์ ์ถ์ด ํ์ํ ๋ฌธ์ ๋ผ์ stack ์๋ queue ์ฌ์ฉ!
Array.from({ length: n }, (v, i) => i + 1)
[1, 2, 3, 4, 5, 6 ... n]
queue์ ์์๋ค์ด ๋จ์ ์์ผ๋ฉด ๊ณ์ํด์ while๋ฌธ์ ๋๋ค.
while๋ฌธ์ ๋ค์ด์ค๋ฉด 1๋ถํฐ k๋งํผ for๋ฌธ์ ๋๋ฉด์ ํ์ ๊ฐ์ฅ ์์ ์๋ ์์๋ฅผ shift()
๋ก ๋นผ๋ด์ push()
๋ก ๋ค์ ๋ค๋ก ๋ฃ๋๋ค(๊ฐ์ ์ซ์ ์ธ์น๊ณ ๋ค๋ก ๋น ์ง๋ ๊ณผ์ )
k - 1 ๋ช
์ด ๊ฐ์์ ์ซ์๋ฅผ ์ธ์น๊ณ ๋ค๋ก ๊ฐ์ ๋ค์ ์ค ์๋ ๊ฒ ๋๋ด๋ฉด ์ด์ k๋ฅผ ์ธ์น๋ ์์๊ฐ ๋ฑ์ฅํ์ผ๋ ๊ทธ ์์๋ shift()
ํด์ ๋นผ์ค๋ค. ๊ณต์ฃผ๋ฅผ ๊ตฌํ๋ฌ ๊ฐ ์์ ๋ฆฌ์คํธ์์ ์ ์ธ ๋๊ณ ์ ๋ฐ์ผ๋ก ๋น ์ง ๊ฒ.
k๋ฅผ ์ธ์น ์์ ๋นผ๊ณ ๋ ๋ค, ํ์ ๊ธธ์ด๊ฐ 1์ด๋ผ๋ฉด ํ์ฌ ํ์ ๋ง์ง๋ง ์์๋ง ๋จ์์๋ค๋ ๊ฒ! ๋ฐ๋ผ์ answer
์ ๊ฐ์ ํ์ ๋ง์ง๋ง์ผ๋ก ๋จ์ ์์์ ๋ฒํธ๋ก ์ค์ ํ๋ค.