Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 12852. 1로 만들기2 본문

acmicpc

[BAEKJOON] 12852. 1로 만들기2

코드와이 2021. 3. 23. 18:05

 

dp

문제링크

www.acmicpc.net/problem/12852

 

12852번: 1로 만들기 2

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

www.acmicpc.net

 

package acmicpc.Silver1;

import java.util.Arrays;
import java.util.Scanner;

// dp
public class ㅁ1로_만들기2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		
		int n = sc.nextInt();
		
		int[] arr = new int[n + 1];
		int[] step = new int[n + 1];
		
		for(int i = 2; i <= n ; i++) {
			int x = i % 2 == 0 ? (i / 2 == 1 ? 1 : arr[i / 2] + 1) : 98765321;
			int y = i % 3 == 0 ? (i / 3 == 1 ? 1 : arr[i / 3] + 1) : 98765321;
			int z = i - 1 == 1 ? 1 : (arr[i - 1] + 1);
			arr[i] = Math.min(x, Math.min(y, z));
			int min = x > y ? i / 3 : i / 2;
			min = Math.min(x, y) > z ? i - 1 : min;
			step[i] = min;
		}
		int idx = n;
		sb.append(arr[n]).append("\n");
		System.out.println(Arrays.toString(step));
		while(idx != 0) {
			
			sb.append(idx).append(" ");
			idx = step[idx];
			
		}
		sb.setLength(sb.length()-1);
		System.out.println(sb);
		sc.close();
	}
}

'acmicpc' 카테고리의 다른 글

[BAEKJOON] 1753. 최단경로  (0) 2021.03.23
[BAEKJOON] 1149. RGB 거리  (0) 2021.03.23
[BAEKJOON] 1463. 1로 만들기(DP)  (0) 2021.03.23
[BAEKJOON] 12865. 평범한 배낭  (0) 2021.03.23
[BAEKJOON] 2178. 미로 탐색  (0) 2021.03.21