https://www.acmicpc.net/problem/1463
const input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : './input.txt')
.toString()
.trim()
.split('\n')
.map(Number);
let N = input[0];
let answer = ['', 0, 1, 1];
for (let i = 4; i <= N; i++) {
if (i % 3 === 0 && i % 2 === 0) {
answer[i] = Math.min(answer[i - 1], answer[i / 2], answer[i / 3]) + 1;
} else if (i % 3 === 0) {
answer[i] = Math.min(answer[i - 1], answer[i / 3]) + 1;
} else if (i % 2 === 0) {
answer[i] = Math.min(answer[i - 1], answer[i / 2]) + 1;
} else {
answer[i] = answer[i - 1] + 1;
}
}
console.log(answer[N]);
계산이 되는 앞 단계의 최소 횟수에서 +1 하면 답이다.
3과 2로 모두 나눠지는 경우 3으로 나눴을 때와 2로 나눴을 때의 계산 횟수 중 최솟값에서 + 1을 하면된다.
ex) 6인 경우 둘 다 나눠지기 때문에 3인 경우 + 1 과 2인 경우 + 1을 비교하여 작은 값에 +1
'코딩테스트 연습 > DP' 카테고리의 다른 글
[백준] 14501번 퇴사 (JavaScript) (0) | 2024.05.02 |
---|---|
[백준] 2193번 이친수(JavaScript) (0) | 2024.05.02 |
[백준] 9461번 파도반 수열 (JavaScript) (0) | 2024.05.02 |
[백준] 2579번 계단 오르기 (JavaScript) (0) | 2024.04.30 |
[백준] 1003번 피보나치 함수 (JavaScript) (0) | 2024.04.30 |