📜 코딩테스트/BAEKJOON\다이나믹 프로그래밍

백준 1463번(DP) : 1로 만들기 (JAVA) 문제 풀이

2021. 8. 10. 16:56
목차
  1.  
  2. 1. 테이블 정의하기
  3.  
  4. 2. 점화식 찾기
  5.  
  6. 3. 초기값 설정
반응형

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

 

1463번: 1로 만들기

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

www.acmicpc.net


 

✏️ 문제


 

🔐 문제 해결

다이나믹 프로그래밍은 아래 세가지 순서를 따라서 문제를 풀이합니다.

  1. 테이블 정의하기
  2. 점화식 찾기
  3. 초기값 설정

 

1. 테이블 정의하기

테이블의 값은 당연히 i의 최소 연산 횟수가 되겠습니다.

 

2. 점화식 찾기

i를 계산하는 방법은 총 3가지가 있습니다.

  1. 2로 나눈 나머지가 0일 경우, 2로 나눈다.
  2. 3으로 나눈 나머지가 0일 경우, 3으로 나눈다.
  3. 1을 뺀다.

i의 최소 연산 횟수를 저장하는 배열을 dp라고 정의할 때, dp[i]의 값은 아래와 같습니다.

dp[i] = Math.min(dp[i-1] + 1, dp[i/2] + 1, dp[i/3] + 1);

 

 

3. 초기값 설정

초기값은 1부터 N까지의 연산을 진행할 것이기 때문에 아래와 같이 설정합니다.

dp[1] = 0;

 


 

🗝 전체 코드

import java.util.Scanner;
import java.lang.Math;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        int[] dp = new int[N+1];

        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.print(dp[N]);
    }
}
반응형
저작자표시 (새창열림)
  1.  
  2. 1. 테이블 정의하기
  3.  
  4. 2. 점화식 찾기
  5.  
  6. 3. 초기값 설정
'📜 코딩테스트/BAEKJOON\다이나믹 프로그래밍' 카테고리의 다른 글
  • 백준 2156번 (DP) : 포도주 시식 (JAVA) 문제 풀이
  • 백준 1003번(DP) - 피보나치 함수 (JAVA) 문제 풀이
  • 백준 2579번(DP) : 계단 오르기 (JAVA) 문제 풀이
  • 백준 9095번(DP) : 1, 2, 3 더하기 (JAVA) 문제 풀이
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (262)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (3)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
백준 1463번(DP) : 1로 만들기 (JAVA) 문제 풀이
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.