ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
- 1๋ฒ ์์๋ถํฐ 8๋ฒ ์์๊น์ง ํ ์๋ฆฌ์ ๋ชจ์ฌ๋๊ธฐ ์ํด ๊ฐ ์์์ ๋ํ๋๋ ๋ฒํธ๋ค์ ์คํ์ ์์๋๋ก ์ ์ฅ
- ๋ฒํธ๊ฐ ์ ์ฅ๋ ์คํ์ ์ํํ๋ฉด์ K ์ฐจ๋ก๊ฐ ๋ ๋๋ง๋ค ํด๋น ์ธ๋ฑ์ค์ ์์๋ฅผ ์คํ์์ ์ญ์
- ๋ง์ฝ์ ํด๋น ์คํ์ ๋๊น์ง ๋์๋ค๋ฉด ๋ค์ ์ฒ์์ผ๋ก ํ๊ทํ๊ธฐ ์ํด ์์์ ํฌ์ธํฐ๋ฅผ ์ธ๋ฑ์ค 0์ผ๋ก ์ด๊ธฐํ
- ์์ ๊ฐ์ ์ฐ์ฐ์ ์คํ์ ์ฌ์ด์ฆ๊ฐ 1(๋ง์ง๋ง์ ๋จ์ ์์)์ด ๋ ๋๊น์ง ๋ฐ๋ณต ์ํ
์ฝ๋
function solution(n, k) {
let answer = 0;
let stack = Array.from({ length: n }, (v, i) => i + 1);
let pt = 0; //์คํ์ ์ธ๋ฑ์ค ์์๋ค์ ์ฐธ์กฐํ๊ธฐ ์ํ ์์์ ํฌ์ธํฐ
let call = 0; //K๋ฒ์งธ์ ํด๋นํ๋ ์ธ๋ฑ์ค ์์๋ฅผ ์ญ์ ํด์ฃผ๊ธฐ ์ํ ์ฐธ์กฐ ๋ณ์
while (stack.length !== 1) { //๋ง์ง๋ง ํ๋๊ฐ ๋จ์ ๋๊น์ง ๋ฐ๋ณต
call++;
pt++;
if (call === 3) { //K๋ฒ์งธ์ ํด๋นํ ๋
stack.splice(pt - 1, 1);
call = 0; // ๋ค์ ์์๋ถํฐ ๋ค์ 1๋ถํฐ ์์ํ๊ธฐ ์ํด 0์ผ๋ก ์ด๊ธฐํ
pt--; splice()๋ฉ์๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐฐ์ด ์์๋ค์ด ํ๋์ฉ ์์ผ๋ก ๋น๊ฒจ์ง๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ๊ฐ ๋ค์ ์ธ๋ฑ์ค ์์๋ฅผ ์ ์์ ์ผ๋ก ์ฐธ์กฐํ๊ธฐ ์ํด 1๊ฐ์ฐ
}
if (stack[pt - 1] === stack[stack.length - 1]) { //ํฌ์ธํฐ๊ฐ ์คํ์ ์์๋ฅผ ๋ชจ๋ ์ํํ์ ๊ฒฝ์ฐ
pt = 0; //๋ค์ ์์์๋ถํฐ ์ฐธ์กฐํด์ฃผ๊ธฐ ์ํด 0์ผ๋ก ์ด๊ธฐํ
}
}
answer = Number(stack.join(""));
return answer;
}
console.log(solution(8, 3));
๋ฌธ์ ํ์ด_ํ
ํ(Queue)
- ํ๋ ํ์ชฝ ๋์์ ์๋ฃ๋ฅผ ์ถ๊ฐํ๊ณ ํ์ชฝ ๋์์ ์๋ฃ๋ฅผ ๊บผ๋ด๋ ์ ํ ์๋ฃ ๊ตฌ์กฐ
- FIFO(First in First Out)_์ ์ ์ ์ถ ๋ฐฉ์
- 1๋ฒ๋ถํฐ 8๋ฒ๊น์ง ์ ์ฅ๋ ์คํ์ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก K๋ฒ์งธ๊ฐ ๋ ๋๊น์ง ๋นผ์ค
- K๋ฒ์งธ ์ด์ ๊น์ง์ ์ธ๋ฑ์ค ์์๋ ์ํ ๋ฐ๋ณต์ ์ํด ๋ค์ ์คํ์ ๋ค์ ์ ์ฅ
- K๋ฒ์งธ์ ํด๋นํ๋ ์ธ๋ฑ์ค ์์๋ ์์์ ๊ทธ๋๋ก ๋นผ์ ์ญ์
์ฝ๋
function 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()); //K๋ฒ์งธ ์ด์ ๊น์ง๋ ์์์ ์ถ์ถํ๊ณ ์ด๋ฅผ ๋ค์ ๋ค์ ์ ์ฌ
queue.shift(); //K๋ฒ์งธ ์ผ๋๋ ๊ทธ๋๋ก ์ถ์ถํ๊ธฐ๋ง ํจ
if(queue.length === 1) answer = queue.shift();
}
return answer;
}
console.log(solution(8, 3));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ ์ ๋ ฌ (0) | 2021.07.17 |
---|---|
[ํ]๊ต์ก๊ณผ์ ์ค๊ณ (0) | 2021.07.16 |
ํ์์ ์ฐ์ฐ(postfix) (0) | 2021.07.13 |
๊ดํธ๋ฌธ์์ ๊ฑฐ (0) | 2021.07.11 |
[์คํ]์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2021.07.10 |
๋๊ธ