코테/JAVA

[백준 1463 / JAVA] 1로 만들기

쇼티드 2024. 1. 21. 00:38
728x90
반응형

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

 

1463번: 1로 만들기

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

www.acmicpc.net

 

DP 문제라 풀이 방식이 매우 많다.

Bottom-Up 방식도 있고 Top-Down 방식도 있다.

 

import java.io.*;
import java.util.*;

public class Main {
    static int[] a;

    public static void main(String[] args) throws IOException {
        int N;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        a = new int[N + 1];

        for (int i = 2; i <= N; i++) {
            a[i] = a[i - 1] + 1;

            if (i % 3 == 0)
                a[i] = Math.min(a[i], a[i / 3] + 1);

            if (i % 2 == 0)
                a[i] = Math.min(a[i], a[i / 2] + 1);
        }

        System.out.println(a[N]);
    }
}

먼저 1 작은 수에서 1을 더한 횟수를 구하고 만약 2나 3으로 나눠지면 그 경우와 비교해 저 적은 수를 저장한다.

이를 N까지 반복한다.

 

728x90
반응형

'코테 > JAVA' 카테고리의 다른 글

[백준 2294 / JAVA] 동전 2  (1) 2024.01.21
[백준 9465 / JAVA] 스티커  (0) 2024.01.21
[백준 1270 / JAVA] DFS와 BFS  (1) 2024.01.20
[백준 1493 / JAVA] 박스 채우기  (0) 2024.01.20
[백준 13904 / JAVA] 과제  (0) 2024.01.20