1로 만들기
-
[백준 1463번] 1로 만들기Coding Test/백준 2021. 1. 24. 03:15
# 문제 내 풀이 n = int(input()) INF = int(1e9) # 무한 값으로 10억 설정 # DP 테이블 생성 및 초기화 dp = [0] * 1000001 dp[1] = 0 # 바텀업 다이나믹 프로그래밍 진행 for i in range(2, n + 1): d3 = dp[i // 3] if i % 3 == 0 else INF # 3으로 나누는 경우 d2 = dp[i // 2] if i % 2 == 0 else INF # 2로 나누는 경우 dp[i] = min(d3, d2, dp[i - 1]) + 1 # 세 가지 연산 중 최소 연산 횟수인 경우를 택해, 연산 진행 및 테이블 값 갱신 # 결과 출력 print(dp[n])
-
[이코테 다이나믹 프로그래밍] 1로 만들기Coding Test/이것이 코딩 테스트다 2021. 1. 10. 04:41
# 문제 정수 X가 주어졌을 때, 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지이다. ⓐ X가 5로 나누어 떨어지면, 5로 나눈다. ⓑ X가 3으로 나누어 떨어지면, 3으로 나눈다. ⓒ X가 2로 나누어 떨어지면, 2로 나눈다. ⓓ X에서 1을 뺀다. 정수 X가 주어졌을 때, 연산 4개를 적절히 사용해서 값을 1로 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 예를 들어 정수가 26이면 다음과 같이 계산해서 3번의 연산이 최솟값이다. 1. 26 - 1 = 25 (ⓓ) 2. 25 / 5 = 5 (ⓐ) 3. 5 / 5 = 1 (ⓐ) # 입력 첫째 줄에 정수 X가 주어진다. (1