๐Ÿ”’Algorithm

๋ฐฑ์ค€[node.js] > 1463๋ฒˆ 1๋กœ ๋งŒ๋“ค๊ธฐ

devWarrior 2024. 12. 13. 00:02

๋ฌธ์ œ

https://www.acmicpc.net/problem/1463

 

๋ฌธ์ œํ’€์ด

dp๋กœ ์ ‘๊ทผํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

๋ฌธ์ œํ’€์ด์˜ ํ•ต์‹ฌ์€ ์•„๋ž˜ ์ ํ™”์‹์ด๋‹ค. 

์—ฌ๊ธฐ์„œ dp[i] ๋Š” i๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์—ฐ์‚ฐ ํšŸ์ˆ˜์ด๋‹ค. ( dp[1]=0, dp[2]=1, dp[3]=1 ์ด๋‹ค )  

 

1 ) i๊ฐ€ 3์˜๋ฐฐ์ˆ˜์ด๊ณ  2์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ

dp[i] = Math. ( dp[i/3] +1 , dp[i/2] +1 , dp[i-1] +1 )   

 

2 ) i๊ฐ€ 3์˜ ๋ฐฐ์ˆ˜์ด๊ณ  2์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹๋•Œ

dp[i] = Math. ( dp[i/3] +1 , dp[i-1] +1 )   

 

3 ) i๊ฐ€ 2์˜ ๋ฐฐ์ˆ˜์ด๊ณ  3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹๋•Œ

dp[i] = Math. ( dp[i/2] +1 , dp[i-1] +1 )   

 

 

let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim();

let num = Number(input);

if (num === 1) {
    console.log(0);
    return;
}

let dp = Array(num + 1).fill(Infinity);
dp[1] = 0;
dp[2] = 1;
dp[3] = 1;

for (let i = 4; i <= num; ++i) {
    dp[i] = dp[i - 1] + 1;

    if (i % 3 === 0) {
        dp[i] = Math.min(dp[i], dp[i / 3] + 1);
    }
    if (i % 2 === 0) {
        dp[i] = Math.min(dp[i], dp[i / 2] + 1);
    }
}

console.log(dp[num]);