DP - 점화식을 찾자 (백준 1463번 1로 만들기)

2023. 9. 2. 21:35·알고리즘

백준 1463번 1로 만들기 문제에서...

 

dp[n] 을 n을 1로 만드는 최소횟수라 생각하자.

DP 문제에서 가장 중요한 것은 점화식을 찾는 것이다.

 

(3으로 나눌 수 있다면) dp[n] = dp[n/3] + 1 이다.

(2로     나눌 수 있다면) dp[n] = dp[n/2] + 1 이다.

                  1을 뺀다면 dp[n] = dp[n-1] + 1 이다.

 

(어떤 작업을 한다면) dp[n] (현재 작업의 횟수는) = dp[작업하기 전의 횟수] + 1 (어떤 작업) 이다.

 

예시로, dp[12] = min(dp[4] + 1, dp[6] + 1, dp[11] + 1) 이며, 이는 12를 1로 만드는 최소 연산 횟수이다.

3가지 중에 가장 최소의 값을 찾아 갱신하는 것이다.

물론 dp[4] 또는 dp[6]을 참조하기 전에 3이나 2로 나눠질 수 있는지 먼저 계산한 후 나눠질 수 있다면 참조해야 한다.

 

초기값은 dp[0] = dp[1] = 0 이다.

 

정답 코드는 아래와 같다.

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] dp = new int[N + 1];
        dp[0] = dp[1] = 0;
        for (int i = 2; i <= N; i++) {
            dp[i] = dp[i - 1] + 1;
            if (i % 2 == 0) dp[i] = Math.min(dp[i], dp[i / 2] + 1);
            if (i % 3 == 0) dp[i] = Math.min(dp[i], dp[i / 3] + 1);
        }
        System.out.println(dp[N]);

 

아래 필기를 게시글로 옮긴 것이다.

'알고리즘' 카테고리의 다른 글

위상 정렬(Topology Sort)  (0) 2024.08.06
DP (Dynamic Programming, 동적 계획법)  (0) 2023.08.25
백트래킹 기본 골격  (0) 2023.08.21
'알고리즘' 카테고리의 다른 글
  • 위상 정렬(Topology Sort)
  • DP (Dynamic Programming, 동적 계획법)
  • 백트래킹 기본 골격
효재감자
효재감자
  • 효재감자
    효재감자의 우당탕탕 개발일지
    효재감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 아무거나 (3)
      • 백준 (44)
      • 알고리즘 (4)
      • 자바 (1)
      • 리눅스(우분투) 및 클라우드 (2)
      • 스프링 (14)
        • 스프링 시큐리티 인 액션 (도서 정리) (5)
      • 플러터(Dart) (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
효재감자
DP - 점화식을 찾자 (백준 1463번 1로 만들기)
상단으로

티스토리툴바