Plite
전자오락 공방
Plite
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 프로젝트 (18)
      • 완성 프로젝트 (3)
      • 프로젝트 진행 내역 (15)
    • 공부 및 정리 (241)
      • 백준 코드 (222)
      • C++ (8)
      • DirectX (2)
      • Unreal Engine (6)
      • 프로그래밍 패턴 (3)
    • 기타 (12)
      • 기타 주저리 (10)
    • 게임과 취미 (1)
    • 대문 (1)

블로그 메뉴

  • 홈
  • 프로젝트
  • 취미, 일상
  • 백준 프로필

공지사항

  • [Read Me]
  • 제 블로그에 방문하신 것을 환영합니다.

인기 글

태그

  • 누적합
  • 백트래킹
  • 동적계획법
  • 이분탐색
  • 위상 정렬
  • 브루트포스
  • 트라이
  • 세그먼트 트리
  • 구현
  • 백준
  • 큐
  • 정렬
  • UC++
  • 분할정복
  • 문자열
  • LCA
  • 유니온 파인드
  • 스택
  • 수학
  • 투포인터
  • 그래프
  • 최소 스패닝 트리
  • 정수론
  • 우선순위큐
  • SCC
  • 기하
  • C++
  • 트리
  • 조합론
  • KMP

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Plite

전자오락 공방

[C++]백준 - 1463번 문제
공부 및 정리/백준 코드

[C++]백준 - 1463번 문제

2021. 6. 18. 21:21

1463번: 1로 만들기 (acmicpc.net)

 

1463번: 1로 만들기

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

www.acmicpc.net

 

1463번 : 1로 만들기


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

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

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

 

입력


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

출력


첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.

 

 

 

 


 

생각해 볼 점


문제에 나온대로 쉽게 점화식을 구할 수 있습니다.

 

x(n) = { if(n == 1) 1,

           if(n > 1) min( x( n / 2 ), x( n / 3 ), x( n - 1)) + 1}

 

위의 점화식을 사용하면 쉽게 동적계획법으로 코딩을 할 수 있습니다.

 

코드


#include <iostream>
using namespace std;
int dp[1000001] = {0,};  

int solution(int N) 
{
    if(N == 1) return 0;
    if(dp[N] != 0) return dp[N];
    
    //3으로 나눔, 2로 나눔, -1을 함
    int min = solution(N-1);
    if(N % 3 == 0) 
    {
        int three = solution(N / 3);
        if(three < min) min = three;
    }
    if(N % 2 == 0)
    {
        int two = solution(N / 2);
        if(two < min) min = two;
    }
    dp[N] = min + 1;
    return dp[N];
}


int main() 
{
    int N;
    cin >> N;
    cout << solution(N);
	return 0;
}

 

그 외


'공부 및 정리 > 백준 코드' 카테고리의 다른 글

[C++]백준 - 1992번 문제  (0) 2021.06.18
[C++]백준 - 10844번 문제  (0) 2021.06.18
[C++]백준 - 2579번 문제  (0) 2021.06.18
[C++]백준 - 1932번 문제  (0) 2021.06.18
[C++]백준 - 1149번 문제  (0) 2021.06.17
    '공부 및 정리/백준 코드' 카테고리의 다른 글
    • [C++]백준 - 1992번 문제
    • [C++]백준 - 10844번 문제
    • [C++]백준 - 2579번 문제
    • [C++]백준 - 1932번 문제
    Plite
    Plite
    개발 일지, 게임 이야기 등을 적어두는 공간입니다.

    티스토리툴바