정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
const fs = require("fs");
const input = parseInt(fs.readFileSync("/dev/stdin").toString().trim());
const a = Array(input + 1).fill(0);
for (let i = 2; i <= input; i++) {
a[i] = a[i - 1] + 1;
if (i % 2 === 0) {
a[i] = Math.min(a[i], a[i / 2] + 1);
}
if (i % 3 === 0) {
a[i] = Math.min(a[i], a[i / 3] + 1);
}
}
console.log(a[input]);
a[i - 1] + 1 은
i에서 1을 빼는 연산을 한 번 한 뒤, 남은 값 ( i − 1 )를 1로 만드는 연산 횟수(a[i-1])에 더합니다.
i % 2 === 0
i가 2의 배수일 때 i/2에서 2를 곱해 i가 된다고보고 (a[i - 1] + 1) 중 작은 쪽을 선택합니다.
i % 3 === 0 이면
i/3에서 3을 곱해 i가 된다고 보고, a[i] = min(a[i],a(i/3)+1)으로 갱신