코딩테스트/백준

[백준][C++]1463번 1로 만들기

윤깡패 2023. 6. 9. 18:16

문제

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

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

www.acmicpc.net

 

 

풀이

바텀-업 방식(동적 계획법 구현 방식)으로 구현 : 점화식을 이용해 DP 테이블을 채운다.

- count[i] : i에서 1로 만드는 데 걸리는 최소 연산 횟수

 

동적 계획법(Dynamic Programming) 알고리즘

 

동적 계획법(Dynamic Programming) 알고리즘

동적 계획법(Dynamic Programming) 알고리즘 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법 동적 계획법 알고리즘 핵심

soobin0821.tistory.com

 

 

코드

#include <iostream>
using namespace std;

int main() 
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  int N;
  cin >> N;

  int count[N + 1];
  count[0] = 0;
  for(int i = 1; i <= N; i++)
  {
    count[i] = i - 1;
    
    if(i % 3 == 0)
    {
      count[i] = min(count[i], count[i / 3] + 1);	// 나누기 3 연산
    }
    if(i % 2 == 0)
    {
      count[i] = min(count[i], count[i / 2] + 1);	// 나누기 2 연산
    }

    count[i] = min(count[i], count[i - 1] + 1);	// -1 연산 표현
  }

  cout << count[N];

}

 

 

 

728x90