백준 온라인 저지/Silver

[BOJ] 12852 - 1로 만들기 2

jooona 2021. 2. 28. 21:53
반응형

-개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다.

 

문제

www.acmicpc.net/problem/12852

 

12852번: 1로 만들기 2

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

www.acmicpc.net

난이도: 실버 1

사용언어: JAVA

 

풀이

기본적인 문제의 풀이는 아래의 문제와 같습니다.

 

jooona.tistory.com/104

 

[BOJ] 1463 - 1로 만들기

-개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 난이..

jooona.tistory.com

단지 마지막에 1로 만든 경로를 출력해주기만 하면 됩니다. 그냥 배열을 하나 더 만들어서 경로를 추적해주기만 하면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.io.*;
import java.util.Arrays;
 
class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        int i;
        int[] arr = new int[N + 1]; // 다이나믹 프로그래밍을 위한 배열
        int[] log = new int[N + 1]; // 경로 추적을 위한 배열
        Arrays.fill(arr, Integer.MAX_VALUE);
        arr[0= 0;
        arr[1= 0;
        for (i = 2; i <= N; i++) {
            if (i % 3 == 0) { // 3으로 나누어 떨어지면
                arr[i] = arr[i / 3+ 1; // 저장
                log[i] = i / 3;
            }
            if (i % 2 == 0) {
                if (arr[i] > arr[i / 2+ 1) { // 2로 나누어 떨어지면서 연산 횟수가 3으로 나눌 때 보다 작다면
                    arr[i] = arr[i / 2+ 1;
                    log[i] = i / 2;
                }
            }
            if (arr[i] > arr[i - 1+ 1) { // 1을 뺐을 때의 연산 횟수가 2나 3으로 나눌 때 보다 작다면
                arr[i] = arr[i - 1+ 1;
                log[i] = i - 1;
            }
 
        }
        bw.write(String.valueOf(arr[N]) + "\n"); // 최소 연산 횟수 출력
        i = N;
        bw.write(String.valueOf(N) + " ");
        while (i > 1) {
            bw.write(String.valueOf(log[i]) + " ");
            i = log[i];
       } // 경로 추적
        bw.flush();
        bw.close();
        br.close();
    }
}
 
 
cs

 

반응형

'백준 온라인 저지 > Silver' 카테고리의 다른 글

[BOJ] 9465 - 스티커  (0) 2021.03.08
[BOJ] 16953 - A → B  (0) 2021.02.25
[BOJ] 1463 - 1로 만들기  (0) 2021.02.25
[BOJ] 3986 - 좋은 단어  (0) 2021.02.24
[BOJ] 11399 - ATM  (0) 2021.02.23