https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
<코드>
let input = require("fs").readFileSync("/dev/stdin").toString();
let num = Number(input);
const DP = new Array(num + 1).fill(0);
for (let i = 2; i <= num; i++) {
DP[i] = DP[i - 1] + 1;
if (i % 2 === 0) {
DP[i] = Math.min(DP[i], DP[i / 2] + 1);
}
if (i % 3 === 0) {
DP[i] = Math.min(DP[i], DP[i / 3] + 1);
}
}
console.log(DP[num]);
<풀이방법>
DP문제로 반대로 생각하여 1부터 시작하여 num이 되는 경우로 구한다.
1을 빼는 것은 1을 더 해주는 것이니까 DP[i] = DP[i-1] +1 이 되고
3으로 나누어 떨어지면 3으로 나누는 것은 3으로 나누어떨어지면 3을 곱하면 된다.
DP[3]의 경우 DP[1] 에서 3을 곱한 경우와 DP[3]을 비교해야하므로 DP[i/3]+1, DP[3]을 비교하는 식을 짜면 된다.
끝
'JavaScript' 카테고리의 다른 글
[백준 JavaScript] 11726번 2×n 타일링 (0) | 2022.09.09 |
---|---|
[백준 JavaScript] 9095번 1,2,3 더하기 (0) | 2022.09.09 |
[백준 JavaScript] 1929번 소수 구하기 (0) | 2022.09.07 |
[백준 자바스크립트] 1181번 단어 정렬 (1) | 2022.08.04 |
[JavaScript]sort 오름차순 내림차순 정렬 (a-b) (0) | 2022.06.22 |