1463 - 1로 만들기

solution

code

#include <iostream>
#include <climits>
using namespace std;

int main()
{
    int N;
    cin >> N;
    int * arr = new int[1000001];
    for(int i = 0; i < 1000001; i++)
        arr[i] = 0;
    arr[2] = 1; arr[3] = 1;

    for(int i = 4; i < 1000001; i++)
    {
        int min = INT_MAX;
        if(i%2==0 && i%3==0)
        {
            min = (arr[i/2] < arr[i/3]) ? arr[i/2] : arr[i/3];
            min = (min < arr[i-1]) ? min : arr[i-1];
        }
        else if(i%2==0 && i%3!=0) min = (arr[i/2] < arr[i-1]) ? arr[i/2] : arr[i-1];
        else if(i%2!=0 && i%3==0) min = (arr[i/3] < arr[i-1]) ? arr[i/3] : arr[i-1];
        else min = arr[i-1];
        
        arr[i] = min + 1;
    }

    cout << arr[N] << endl;

    return 0;
}

ref

1463번: 1로 만들기