본문 바로가기

컴퓨터/Online Judge

[acmicpc.net] 1463 1로 만들기

문제 링크 : https://www.acmicpc.net/problem/1463


문제 내용


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


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

2. X가 2로 나누어 떨어지면, 2로 나눈다.

3. 1을 뺀다.


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


소스코드


#include <iostream>
using namespace std;
 
int main() {
    int N;
    int *arr;
    cin >> N;
    arr = new int[N+1];
    for(int i=0; i<N+1; i++)
        arr[i]=1e6;
    arr[0] = 0;
    arr[1] = 0;
    for(int i=1; i<N+1; i++){
        if(i+1<=N)
            arr[i+1] = min(arr[i+1], arr[i]+1);
        if(2*i<=N)
            arr[2*i] = min(arr[2*i], arr[i]+1);
        if(3*i<=N)
            arr[3*i] = min(arr[3*i], arr[i]+1);
    }
    cout << arr[N];
    return 0;
}



'컴퓨터 > Online Judge' 카테고리의 다른 글

[acmicpc.net] 2167 2차원 배열의 합  (0) 2016.09.11
[acmicpc.net] 2579 계단 오르기  (0) 2016.09.09
[acmicpc.net] 2193 이친수  (0) 2016.09.08
[acmicpc.net] 1463 1로 만들기  (0) 2016.09.07
[acmicpc.net] 1149 RGB거리  (0) 2016.09.06
[acmicpc.net] 1003 피보나치 함수  (0) 2016.09.01