문제
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
구현 방법
dp로 풀어주었습니다. 1부터 시작하여 횟수의 최솟값을 구해주었습니다.
모든 값이 할 수 있는 연산인 -1을 dp 에 넣고 /2가 가능하면 /2의 값과 현재 -1을 한 dp 값을 비교하여 더 작은 값을 dp에 넣어줍니다. /3도 마찬가지로 비교하여 더 작은 값을 dp에 넣어줍니다.
구현 코드
package BOJ.Silver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class BOJ1463_1로만들기 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N + 1];
for(int i = 2; i <= N; i++){
arr[i] = arr[i - 1] + 1;
if(i % 2 == 0) arr[i] = Math.min(arr[i], arr[i / 2] + 1);
if(i % 3 == 0) arr[i] = Math.min(arr[i], arr[i / 3] + 1);
}
System.out.println(arr[N]);
}
}
'백준' 카테고리의 다른 글
백준 1932번 : 정수 삼각형 (0) | 2021.03.19 |
---|---|
백준 1904번 : 01타일 (0) | 2021.03.19 |
백준 9461번 : 파도반 수열 (0) | 2021.03.19 |
백준 9095번 : 1, 2, 3 더하기 (0) | 2021.03.19 |
백준 1010번 : 다리 놓기 (0) | 2021.03.19 |