Algorithm
[백준] 1463번: 1로 만들기 - Node.js (자바스크립트)
sqsung
2023. 6. 5. 11:42
1. 문제 ㅡ 1463번: 1로 만들기 (난이도: Silver III)
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const num = +require('fs').readFileSync('/dev/stdin').toString();
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]);
2-1. 풀이 설명
입력으로 주어진 정수가 1이 되기까지 필요한 최소 연산 횟수를 구하는 DP문제다.
아래 규칙에 따라 2부터 N까지, 각 숫자를 1로 만드는 최소 연산 횟수를 계산하여 'DP' 배열에 저장해두었다.
- 어떤 수든 우선 이전 값 + 1을 넣는다 (이전 수를 1로 만들기 위해 필요한 연산 횟수 + 1 만큼의 연산을 수행하면 현재 수를 1로 만들 수 있음)
- 2로 나눠지는 경우 DP 배열에 (i / 2) OR 1번에서 계산된 값 중 더 작은 값을 DP 배열에 저장한다
- 3으로 나눠지는 경우 DP 배열에 (i / 3) OR 1번에서 계산된 값 중 더 작은 값을 DP 배열에 저장한다
마지막에 DP 배열의 N번째에 위치한 값을 출력해주면 된다.