728x90

문제 183. (2022-02-13)

 

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

Baekjoon 1463. 1로 만들기

[파이썬(python) - DP]

정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.

X가 3으로 나누어 떨어지면, 3으로 나눈다.
X가 2로 나누어 떨어지면, 2로 나눈다.
1을 뺀다.

정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.

 


입력

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

 


출력

첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.

 


입력 예시

2

 


출력 예시

1

 


❧ 정답

🔎IDEA) DP - 이전 연산의 최소값을 기존에 구한 dp 테이블에서 찾아낸다.

[Line 4 - 7]
👉 index error를 방지 하기 위해 x가 3이하일 경우에도 무조건 길이 4의 리스트를 만든다.

[Line 10 - 19]
👉 우선 임의로 v의 값을 최댓값인 (i + 1)로 설정한다.
      -> 1을 i번 더했을 경우
👉 이후, [i를 3으로 나눴을 경우의 값]과 [i를 2로 나눴을 경우의 값], [i에서 1을 뺐을 경우의 값]을 비교하여 이중 가장 최솟값구한다.
👉 이때의 최솟값에 방금 전의 연산 (i를 3으로 나눴을 경우 or i를 2로 나눴을 경우 or i에서 1을 뺐을 경우) 횟수인 1을 더해준다.
👉 dp 테이블의 값이 없는 4부터 시작하여 x까지 값을 채워 넣음으로 bottom-up 방식의 풀이에 해당한다.

728x90