본문 바로가기

ALGORITHM

백준 1463 1로 만들기 (Java)

1. 문제 링크

 

1463번: 1로 만들기

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

DP 문제인데 하향식으로 풀었다..ㅎㅎ

N부터 3으로 나눠지는 경우, 2로 나눠지는 경우, 그리고 1을 빼는 경우로 해서

그 몫을 배열에 있는 값과 현재 수+1 값과 비교해서 작은 값을 넣는다.

1까지 진행하면서 배열의 1번에 저장된 값을 출력한다.

 

4. 코드

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] num = new int[N+1];
		Arrays.fill(num, Integer.MAX_VALUE);
		num[N] = 0;
		for(int i=N;i>0;i--) { 
			if(i%3==0) {
				num[i/3] = Math.min(num[i/3], num[i]+1); 
			}
			if(i%2==0) {
				num[i/2] = Math.min(num[i/2], num[i]+1);
			}
			num[i-1] = Math.min(num[i-1], num[i]+1);
		}
		System.out.println(num[1]);
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 1874 스택 수열 (Java)  (0) 2023.04.23
백준 1966 프린터 큐 (Java)  (0) 2023.04.22
백준 6593 상범 빌딩 (Java)  (0) 2023.04.21
백준 14502 연구소 (Java)  (0) 2023.04.21
백준 20055 컨베이어 벨트 위의 로봇 (Java)  (0) 2023.04.20