๐ ๋ฌธ์
N์ฅ์ ์นด๋๊ฐ ์๋ค. ๊ฐ๊ฐ์ ์นด๋๋ ์ฐจ๋ก๋ก 1๋ถํฐ N๊น์ง์ ๋ฒํธ๊ฐ ๋ถ์ด ์์ผ๋ฉฐ, 1๋ฒ ์นด๋๊ฐ ์ ์ผ ์์, N๋ฒ ์นด๋๊ฐ ์ ์ผ ์๋์ธ ์ํ๋ก ์์๋๋ก ์นด๋๊ฐ ๋์ฌ ์๋ค.
์ด์ ๋ค์๊ณผ ๊ฐ์ ๋์์ ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณตํ๊ฒ ๋๋ค. ์ฐ์ , ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ฒ๋ฆฐ๋ค. ๊ทธ ๋ค์, ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ์ ์ผ ์๋์ ์๋ ์นด๋ ๋ฐ์ผ๋ก ์ฎ๊ธด๋ค.
์๋ฅผ ๋ค์ด N=4์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์. ์นด๋๋ ์ ์ผ ์์์๋ถํฐ 1234 ์ ์์๋ก ๋์ฌ์๋ค. 1์ ๋ฒ๋ฆฌ๋ฉด 234๊ฐ ๋จ๋๋ค. ์ฌ๊ธฐ์ 2๋ฅผ ์ ์ผ ์๋๋ก ์ฎ๊ธฐ๋ฉด 342๊ฐ ๋๋ค. 3์ ๋ฒ๋ฆฌ๋ฉด 42๊ฐ ๋๊ณ , 4๋ฅผ ๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ฉด 24๊ฐ ๋๋ค. ๋ง์ง๋ง์ผ๋ก 2๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋๋ฉด, ๋จ๋ ์นด๋๋ 4๊ฐ ๋๋ค.
N์ด ์ฃผ์ด์ก์ ๋, ์ ์ผ ๋ง์ง๋ง์ ๋จ๊ฒ ๋๋ ์นด๋๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ | ์ถ๋ ฅ |
์ฒซ์งธ ์ค์ ์ ์ N(1<=N<=500,000)์ด ์ฃผ์ด์ง๋ค. | ์ฒซ์งธ ์ค์ ๋จ๊ฒ ๋๋ ์นด๋์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค. |
๐ค ์ฒ์์ ์ ์ถํ ์์ค ์ฝ๋(์๊ฐ ์ด๊ณผ ๋ฐ์โโ)
const input = require('fs').readFileSync('/dev/stdin').toString().trim();
function solution(num) {
const Q = Array.from({ length: num }, (v, i) => (v = i + 1));
let i = 0;
while (Q.length > 1) {
if (i % 2 === 0) {
Q.shift();
} else {
Q.push(Q.shift());
}
i++;
}
return Q[0];
}
console.log(solution(Number(input)));
โ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ด์
push, pop์ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง shift() ๋ฉ์๋์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ํ์์ด ํ์ํ๋ฏ๋ก ์ต์ ์ผ ๋๋ O(N)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค. (JavaScript ๋ฐฐ์ด์ ํด์ ํ ์ด๋ธ๋ก ๊ตฌํ๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ)
JavaScript๋ Queue ๊ด๋ จ ๋ด์ฅ ํจ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ง์ ๊ตฌํํด์ ์ฌ์ฉํด์ผ ํ๋ค. ์ ๋ ฅ ๊ฐ์ด 1,000 ์ดํ๋ผ๋ฉด shift() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋์ง๋ง ๋ฌธ์ ์์ ์ฃผ์ด์ง ์ ๋ ฅ ๊ฐ์ ๋ฒ์๋ 500,000 ๊น์ง์ด๋ค..ใ ใ
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ
Queue๋ฅผ ์ง์ ๊ตฌํํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ง๋ง ์ค์ ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ๋ฅผ ๋ณผ ๊ฒฝ์ฐ์๋ ์๊ฐ์ ์ซ๊ฒจ ์ด๋ง์ ๋ ์ฝ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐ์ ํ๋ค. ๊ทธ๋ฆฌํ์ฌ Queue๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋๋ค.
๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์๋ ์ธ๋ฑ์ค๋ฅผ ํ ๋จ๊ณ ๊ฑด๋๋ฐ๋ ๊ฒ์ด๋ค.
๋จ, ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ์๋ค...๐ข
const input = require('fs').readFileSync('/dev/stdin').toString().trim();
function solution(num) {
const Q = Array.from({ length: num }, (v, i) => (v = i + 1));
let idx = 0;
while (idx !== Q.length - 1) {
if (idx % 2 === 0) idx++;
else Q.push(Q[idx++]);
}
return Q[idx];
}
console.log(solution(Number(input)));
๐ ์ฐธ๊ณ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/BOJ] 1181 - ๋จ์ด ์ ๋ ฌ (0) | 2022.10.07 |
---|---|
[JavaScript/BOJ] 1018 - ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2022.09.17 |
[Python] ๋ฐฑ์ค 10989๋ฒ ์ ์ ๋ ฌํ๊ธฐ 3 (0) | 2022.08.08 |
[Python] ๋ฐฑ์ค 2751๋ฒ ์ ์ ๋ ฌํ๊ธฐ 2 (0) | 2022.08.08 |
[Node.js/JavaScript] ๋ฐฑ์ค 1157๋ฒ ๋จ์ด ๊ฐ์ (0) | 2022.07.05 |