[BOJ/Java] 1463: 1로 만들기
·
Problem Solving/BOJ
문제https://www.acmicpc.net/problem/1463정수 `X`에 사용할 수 있는 연산은 세 가지가 있다.`X`가 3으로 나누어 떨어지면, 3으로 나눈다.`X`가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어지면, 위의 세 가지 연산을 적절히 사용해서 1을 만들 수 있는 최소 연산 횟수를 구해야 한다.1 ≤ `N` ≤ 1,000,000 풀이시간 제한이 0.15초로 매우 짧고, `N`의 범위를 보았을 때 브루트 포스 알고리즘을 적용하기 어렵다는 것을 알 수 있다.해당 문제는 DP(혹은 BFS)로 풀 수 있다. `N`이 10만 정도라면 DP로도 충분하다. 더 커지면 BFS를 사용할 수 있다. `dp[i]`를 정수 `i`에서 1로 만들기 위한 최소 연산 횟수로 정의한다.사용할..