![[BOJ 1463] 1로 만들기 (Java, DP)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkxPKH%2FbtsmR9mS53Z%2FiNCK9RktOImggd3gNeJU5k%2Fimg.png)
![leejinwoo1126](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
[BOJ 1463] 1로 만들기 (Java, DP)알고리즘/동적 프로그래밍2023. 6. 30. 21:28
Table of Contents
반응형
문제 링크
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
문제 풀이
- 상향식(Bottom-up)으로 DP 풀이
- 시간복잡도 O(N)
*DP 배열 결과
idx | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
DP | 0 | 0 | 1 | 1 | 2 | 3 | 2 | 3 | 3 | 2 | 3 |
제출 코드
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] DP;
static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
}
static void pro() {
DP = new int[N + 1];
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]);
}
public static void main(String[] args) throws Exception {
input();
pro();
}
}
반응형
'알고리즘 > 동적 프로그래밍' 카테고리의 다른 글
[BOJ 18353] 병사 배치하기 (Java, DP, LIS) (0) | 2023.06.30 |
---|---|
[BOJ 10844] 쉬운 계단 수 (Java, DP) (0) | 2023.06.30 |
[BOJ 2156] 포도주 시식(Java, DP) (0) | 2023.06.30 |
[BOJ 2302] 극장 좌석 (Java, DP) (0) | 2023.06.29 |
[BOJ 2670] 연속부분최대곱 (Java, DP) (0) | 2023.06.28 |
![leejinwoo1126](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!