โถ ๋ฌธ์ : https://www.acmicpc.net/problem/17626
โถ ์ฝ๋ :
const input = require('fs').readFileSync('BaekJoon/testcase.txt').toString().trim().split('\n');
let n = Number(input[0]);
const dp = Array(50001);
dp[0] = 0;
dp[1] = 1;
for(let i = 1; i < n+1; i++){
let count = 0;
let temp = i;
while(temp != 0){
const num = parseInt(Math.sqrt(temp)) ** 2;
temp -= num;
count += 1;
}
dp[i] = count;
for(let j = 1; j < parseInt(Math.sqrt(i)) + 1; j++){
dp[i] = Math.min(dp[i], dp[j ** 2] + dp[i - (j**2)]);
}
}
console.log(dp[n])
โถ ๋ฌธ์ ํ์ด :
1. DP ์ ๊ด๋ จํ์ฌ ์กฐ๊ธ์ ์๊ฐ๋ ๊ธธ๊ฒํด์ผํ๊ณ ๋ฒ๊ฑฐ์ ๊ฒ์์ ํด๋ณด์๋ค.
[์ฐธ์กฐ] : https://velog.io/@kyy00n/%EB%B0%B1%EC%A4%80-17626%EB%B2%88-Four-Squares
2. ์์ ์ฌ์ดํธ์์ Python ์ ์ด์ฉํด ๊ตฌํํ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด Javascript ์ฝ๋๋ก ๋ณํํด๋ณด๋ฉฐ ๋ฐฉ๋ฒ์ ์ดํดํด๋ณด์๋ค.
3. ์ด๊ธฐ 1 ~ 50000๊น์ง์ ์ซ์๋ณ ์ต์ ๋ผ๊ทธ๋์ฃผ ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ธ dp ๋ฅผ ์ ์ธํ๊ณ 0๊ณผ 1์ ์ด๊ธฐํํ์๋ค.
4. ์ดํ ์ ๋ ฅ๋ n ๋งํผ ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ค.
5. ๋ด๋ถ์์๋ count๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๊ณ , temp ๋ณ์์ i ๊ฐ์ ํ ๋นํ๋ค.
6. ์ดํ temp ๊ฐ 0์ด ๋ ๋๊น์ง while๋ฌธ์ ๋๋ฉด์ num์ด๋ผ๋ ๋ณ์์ ํ์ฌ temp ๊ฐ์ ์ ๊ณฑ๊ทผ์ ์ ๊ณฑ์ ๋นผ์ค๋ค. ์ด๋ count๋ 1์ ์ฆ๊ฐ์์ผ temp์์ ๋บ ์ ์๋ ๊ฐ์ฅ ํฐ ์ ๊ณฑ๊ทผ์ ์ ๊ณฑ์๋ฅผ ๋บ์๋์ count๋ฅผ dp์ ์ ์ฅํ๋ค.
7. ์ด๋ ๊ฒ ์ฐ์ ์ ์ผ๋ก count๊ฐ์ ๊ตฌํ๋ค for๋ฌธ์ ์ด์ฉํด 1 ~ (i ์ ์ ๊ณฑ๊ทผ ์ ์๋ถ์ ์ ๊ณฑ + 1)๊น์ง ์ํํ๋ฉด์ ํ์ฌ dp์ ์ ์ฅ๋ ๊ฐ๊ณผ ํด๋น ์(i)๋ฅผ ๋ง๋ค ์ ์๋ ์ ๊ณฑ์ ๊ฒฝ์ฐ์ ์ ์ฅ๋ dp ๊ฐ์ ํฉ์ ๋น๊ตํ๋ฉฐ ์ต์๊ฐ์ ํ์ํ ๋ค dp[i]๋ฅผ ์ ๋ฐ์ดํธํ๋ค. (๋ฌผ๋ก ๊ทธ๋๋ก์ผ ์ ์๊ฒ ์ง)
8. ์ด๋ ๊ฒ ๋ฐ๋ณต๋ฌธ์ ์ํํ ๋ค dp[์ ๋ ฅ ์ซ์]๋ฅผ ์ถ๋ ฅํ๋ฉด ๋์ ~
'๐ฏ CodingTest > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 9095๋ฒ 1, 2, 3 ๋ํ๊ธฐ (0) | 2022.06.17 |
---|---|
[BaekJoon] 17219๋ฒ ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ (0) | 2022.06.03 |
[BaekJoon] 11724๋ฒ ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2022.06.03 |
[BaekJoon] 2606๋ฒ ๋ฐ์ด๋ฌ์ค (0) | 2022.06.02 |
[BaekJoon] 2579๋ฒ ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2022.06.02 |