본문 바로가기
Algorithm🐰/백준

[백준] 1463 1로 만들기 DP

by Jouureee 2021. 8. 23.

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

 

1463번: 1로 만들기

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

www.acmicpc.net

 

분석 :

재귀와 메모제이션을 이용해 풀었다.  

처음에  if (d[n] > 0) return d[n]; 부분을 넣어주지 않아 시간 초과가 났었고 d[1]일때 

n == 1일때 처리를 return 0으로 처리 해주지 않아 100퍼에서 에러로 헤맸다

 

 

c++ 코드 :

//
//  1463_makeOne.cpp
//  SOMA👩🏻‍💻
//
//  Created by JoSoJeong on 2021/08/23.
//

#include <stdio.h>
#include <iostream>
#include <algorithm>

using namespace std;
int d[1000001] = {0, };

int dp(int n){
    int max = 1000001;
    d[1] = d[2] = d[3] = 1;
    if(n == 1) { return 0;}
    
    if (d[n] > 0) return d[n];
    
    if(n % 3 == 0)  { max = min(dp(n/3) + 1, max); }
    if(n % 2 == 0) { max = min(dp(n/2) + 1, max); }
    max = min(dp(n-1) + 1, max); // dp(n-1);
    d[n] = max;
    
    return d[n];
}

int main(){
    int n;
    cin >> n;
    cout << dp(n) << '\n';
    return 0;
}

 

'Algorithm🐰 > 백준' 카테고리의 다른 글

[백준] 7576 토마토 BFS  (0) 2021.12.10
[백준] 15681 트리와 쿼리 DP + DFS  (0) 2021.09.09
[백준] 5567 결혼식 구현  (0) 2021.06.13
[백준] 2579 계단 오르기 DP  (0) 2021.06.13
[백준] 1149 RGB 거리 DP  (0) 2021.05.08

댓글