ํฐ์คํ ๋ฆฌ ๋ทฐ
[๋ฌธ์ ]
[ํ์ด]
์๋น์ด๊ฐ ๋์์ ์ฐพ์์ ์ด๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
- 1์ด ๋์ -1 ์นธ or +1 ์นธ ์ด๋
- 0์ด ๋์ ์๊ฐ์ด๋ํ์ฌ X2์นธ ์ด๋
๋ฐ๋ผ์ ๊ท์น์ ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๋ณด๊ณ DP๋ฅผ ํ์ฉํ์ฌ ํ์ดํ์์ต๋๋ค.
1. ์๋น์ด ์์น N๋ณด๋ค ์์ ์นธ์ผ๋ก๋ ์๊ฐ์ด๋์ด ๋ถ๊ฐ๋ฅํด์ ํญ์ 1์ด๊ฐ ๊ฑธ๋ ค -1์นธ์ฉ ์ด๋ํด์ผํฉ๋๋ค.
- N๋ณด๋ค ์์ ์์น๋ 0์์ 1์ด์ฉ ์๊ฐ์ ์ฆ๊ฐ์์ผ ๊ฐ dp ๋ฐฐ์ด์ ์์น ์ธ๋ฑ์ค์ ์๊ฐ์ ์ ์ฅ
2. ์๋น์ด ์์น N์ 0์ด๋ก ์์ํด์ N๋ณด๋ค ํฐ ์นธ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ ๊ฑท๊ธฐ์ ์๊ฐ์ด๋ 2๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ์์น๋ฅผ X๋ผ๊ณ ํ์๋, X์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ๋ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
- X-1์์ +1์นธ ๊ฑธ์ด์จ ๊ฒฝ์ฐ : 1์ด์ ์๊ฐ์ด ๊ฑธ๋ฆผ => dp[X-1] + 1
- X/2 ์นธ์์ ์๊ฐ์ด๋ํ ๊ฒฝ์ฐ : 0์ด์ ์๊ฐ์ด ๊ฑธ๋ฆผ => dp[X/2] (X์ ๊ฐ์ด ์ง์์ธ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅ!!)
๋ฐ๋ผ์ 2๋ฒ์ ๊ฒฝ์ฐ ์ ํ์์ ์ธ์ฐ๋ฉด dp๋ dp[X-1] + 1 ์ dp[X/2] ์ค ๋ ์์ ๊ฐ์ด ๋ฉ๋๋ค.
3. dp[X/2]๋ก X์ ์์น๊ฐ ๊ฐฑ์ ๋๋ฉด, X๋ณด๋ค ์์ ๊ฐ๋ค๋ ๋ค์ ๊ฐฑ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
- dp[X/2]๊ฐ ์ ํ๋ ๊ฒฝ์ฐ, X๋ถํฐ X/2๊น์ง -1์นธ์ฉ ๋ด๋ ค๊ฐ๋ฉฐ "dp[X/2] + ๋ด๋ ค๊ฐ ์นธ์"๊ฐ ํด๋น ์นธ์ dp๊ฐ๋ณด๋ค ์๋ค๋ฉด ๊ฐฑ์
์ต์ข ์ ์ผ๋ก dp[K]์ ๊ฐ์ ์ถ๋ ฅํด์ค๋๋ค.
*์ฒ์์ dp๋ฅผ K๊น์ง ๊ตฌํด์ฃผ์๋๋ฐ, K๋ณด๋ค ํฐ์์์ -1์นธ์ฉ ๋ด๋ ค์จ ๊ฒฝ์ฐ์์ ์ต์๊ฐ์ด ๊ตฌํด์ง ์๋ ์๋ค๋ ๊ฒ์ ์๊ณ ๋ฒ์๋ฅผ K+N์ผ๋ก ํ์ฅ์์ผ์ฃผ์์ต๋๋ค.
์์ 1๋ฒ์ ์ดํด๋ณด์๋ฉด N=5์ด๊ณ K=17์ผ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. 0~5 ๊น์ง ๊ตฌํ๊ธฐ
dp = [5,4,3,2,1,0]
2. 6~22 ๊น์ง ๊ตฌํ๊ธฐ
dp[6] = dp[5] + 1 = 1 (dp[3]์ ๊ฐ์ 2์ด๊ธฐ ๋๋ฌธ์ 1๋ก ๊ฐฑ์ )
dp[7] = dp[6] + 1 = 2 (ํ์์ด๋๊น ์ ์นธ + 1)
dp[8] = dp[4] = 1 (dp[7] + 1 = 3์ผ๋ก 1๋ณด๋ค ํผ)
...
์ด๋ฐ์์ผ๋ก ๊ตฌํด๋๊ฐ๋ฉด dp[K] = 2 ๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
[์ฝ๋]
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split('\n');
const [N, K] = input[0].split(" ").map(Number);
const len = K + N;
let dp = Array.from({length: len}, (_, i) => -1);
for(let i=0;i<=N;i++) {
dp[i] = N-i;
}
for(let i=N+1;i<=len;i++) {
const num = dp[i-1] + 1;
const divNum = i/2;
if(divNum >= 0 && i % 2 == 0 && dp[divNum] < num) {
dp[i] = dp[divNum];
// ๋ฐ์ ์ ๋ค๋ ๊ฐฑ์
for(let j=i-1;j>=divNum;j--) {
if(dp[j+1] + 1 < dp[j]) {
dp[j] = dp[j+1] + 1;
} else {
break;
}
}
} else {
dp[i] = num;
}
}
console.log(dp[K]);
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/node.js] ๋ฐฑ์ค 1522๋ฒ - ๋ฌธ์์ด ๊ตํ (0) | 2022.08.24 |
---|---|
[JavaScript/node.js] ๋ฐฑ์ค 20437๋ฒ - ๋ฌธ์์ด ๊ฒ์ 2 (1) | 2022.08.23 |
[JavaScript] ๋ฐฑ์ค 2457๋ฒ - ๊ณต์ฃผ๋์ ์ ์ (0) | 2022.08.04 |
[JavaScript] ๋ฐฑ์ค 1806๋ฒ - ๋ถ๋ถํฉ (0) | 2022.08.01 |
[Java] ๋ฐฑ์ค 5214๋ฒ - ํ์น (0) | 2022.07.18 |
- Total
- Today
- Yesterday
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ํ๋กํผํฐ
- ๋คํธ์ํฌ
- ํ๋ก๊ทธ๋๋จธ์ค
- JavaScript
- git
- ํ๋กํ ์ฝ
- ๋ ์์ปฌ ํ๊ฒฝ
- Baekjoon
- ์ฝ๋ฉํ ์คํธ
- ์๊ณ ๋ฆฌ์ฆ
- ์นด์นด์ค ์ธํด
- ๋์์ธ ํจํด
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ ์ญ ๋ณ์
- fp
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- map
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- TDD
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ
- ์ด์์ฒด์
- ๋ฐฑ์ค javascript
- ๋ฐฑ์ค
- ๋ฐฑ์ค node.js
- ํฌํฌ์ธํฐ
- http
- ์ด๋ถํ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |