๐ฉ๐ปโ๐ป๋ฌธ์ ๋งํฌ
[์ธํ๋ฐ ์น์
6] ๊ณต์ฃผ ๊ตฌํ๊ธฐ (Javascript)
์ ๋ฃ ๊ฐ์์ธ ๊ด๊ณ๋ก ๋ฌธ์ ์ค๋ช
์ ์๋ตํฉ๋๋ค.
โ๏ธIdea Sketch
2021-06-27 queue๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์์ ๋ฆ๊ฒ ํ์
์ฒซ๋ฒ์งธ ์๋ : stack ์ฌ์ฉ
1. ์์๊ฐ ํน์ ์ซ์ K๋ฅผ ์ธ์น๋ฉด ์ ์ธ, ์ฒ์๋ถํฐ ์์
2. stack ์ ์์ฑํ์ฌ ์ด๊ธฐ๊ฐ 1, ์ ์ธ๋๋ฉด 0
let stack = Array.from({length: n}, v => 0);
3. ์์ ์ ์ธ ๋ก์ง
- stack ๊ฐ์ด 1์ธ ๊ฒฝ์ฐ, num++
- num === k ์ธ ๊ฒฝ์ฐ stack ๊ฐ์ 0, num === 0;
์ฑ๋ฅ ์ด์ ์์ธก
์๋ง์ ์์๊ฐ ์ ์ธ๋ ์ํฉ์์๋ stack์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ
๋ฌธ์ ์
๋ง์ง๋ง ๋จ์ ์์๋ฅผ ์ถ๋ ฅํด์ผ ํจ
๋งค๋ฒ 1์ธ stack๊ฐ์ด ๋ช ๊ฐ์ธ์ง ํ์ธํด์ผ ํจ
4. stack์ 1๋ฒ๋ถํฐ n๋ฒ๊น์ง ์ด๊ธฐ๊ฐ ์ค์
let stack = Array.from({length: n-1}, (v, i) => i+1);
5. k๋ฅผ ์ธ์น ์์๋ stack.pop();
- while (stack.length > 1)
- stack ์ํํ๋ค๊ฐ ์ค๊ฐ์ ๊ฐ์ ์ญ์ ํ๋ฏ๋ก stack์ด๋ผ ํ ์ ์๊ตฐ. stack์ด ์๋๋ค
1. stack์ 1๋ฒ๋ถํฐ n๋ฒ๊น์ง ์ด๊ธฐ๊ฐ ์ค์ [1, 2, 3, โฆ , n]
let stack = Array.from({length: n-1}, (v, i) => i+1);
2. for๋ฌธ์ผ๋ก stack์ ์ํ
- ์ํํ ๋๋ง๋ค newStack.push(); num++
- num === k์ธ ๊ฒฝ์ฐ num = 0;
- stack ํ๋ฐํด ์ํํ ๊ฒฝ์ฐ, stack = newStack ์ค์
๋ฌธ์ ์
javascript ํน์ฑ์ ๋ฐฐ์ด ๋ณต์ฌ arr.slice()๋ฅผ ์จ์ผํ๋๋ฐ, ์์ธ ์ ์๋?
๋๋ฒ์งธ ์๋ : queue ์ฌ์ฉ
1. queue 1๋ฒ๋ถํฐ n๋ฒ๊น์ง ์ด๊ธฐ๊ฐ ์ค์ [1, 2, 3, โฆ , n]
let queue = Array.from({length: n-1}, (v, i) => i+1);
2. queue ์ํ
- ์ํํ ๋๋ง๋ค cnt++, queue.push(queue.shift());
- cnt === k ์ธ ๊ฒฝ์ฐ cnt = 0, queue.shift();
while (queue.length > 1) {
let num = queue.shift();
if (cnt === k) cnt = 0;
else {
queue.push(num);
cnt++;
}
}
return queue.shift();
โ๏ธ์์ค์ฝ๋
2021-06-27
function solution(n, k) {
let queue = Array.from({length: n}, (v, i) => i+1);
let cnt = 0;
while (queue.length > 1) {
let num = queue.shift();
cnt++;
if (cnt === k) cnt = 0;
else queue.push(num);
}
return queue.shift();
}