본문 바로가기

코딩 테스트/백준(java)

DP - 1463. 1로 만들기

반응형

문제

www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

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

www.acmicpc.net

 

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
        
		int targetNum = Integer.parseInt(st.nextToken());
		int[] minValues = new int[targetNum+1];
		
		for (int x = 2; x <= targetNum; x++) {
			
			int minValue = x;
			if (x % 3 == 0 && minValue > minValues[x/3]) {
				minValue = minValues[x/3];
			}
			
			if (x % 2 == 0 && minValue > minValues[x/2]) {
				minValue = minValues[x/2];
			}
			
			if (minValue > minValues[x-1]) {
				minValue = minValues[x-1];
			}
			
			minValues[x] = minValue+1;
		}
		System.out.println(minValues[targetNum]);
	}
}

 

설명

minValues[x]를 기준으로, minValues[x/3]과 minValues[x/2], minValues[x-1]을 비교해 나가면 됩니다.

물론, 비교 조건은 있습니다.

x%3 == 0, x%2 == 0, x > 1(항상 성립하겠죠?)

2번째의 값은 minValues[x/2]minValues[x-1]을 비교하면 되겠죠

3번째의 값은 minValues[x/3]과 minValues[x-1]을 비교하면 되겠죠

4번째의 값은 minValues[x/2]과 minValues[x-1]을 비교하면 되겠죠

5번째의 값은 minValues[x-1]에서 가져오면 되겠죠

6번째의 값은 minValues[x/3]과 minValues[x/2], minValues[x-1]을 비교하면 되겠죠

7번째의 값은 minValues[x-1]에서 가져오면 되겠죠

이렇게 차근차근 계산해 나가면 됩니다

 

회고

차근차근 생각해보면 문제가 풀리네요. (아직 쉬운단계라서요)

 

 

반응형

'코딩 테스트 > 백준(java)' 카테고리의 다른 글

DP - 1003. 피보나치 함수  (0) 2021.03.25
DP - 9095. 1, 2, 3 더하기  (0) 2021.03.25
DP - 2839. 설탕 배달  (0) 2021.03.25
Q14891번: 톱니바퀴  (0) 2021.03.20
Q14890: 경사로  (0) 2021.03.20