삐까냥의 파도타기
1463번) 1로 만들기 본문
문제 출처 : https://www.acmicpc.net/problem/1463
import java.util.Scanner; public class Main { public static void main(String[] args){
Scanner scanner = new Scanner(System.in); int input = scanner.nextInt(); findNum(input); } static void findNum(int n) { int[] arrayNum = new int[n+1]; //default로 0 세팅
for ( int i = 2; i <= n; i++ ) { int num = 0; //숫자 i에 대한 횟수 변수
//숫자 "i"가 3으로 나누어지면 숫자 "i%3"값에 1을 더한다 if ( i%3 == 0 ) { num = arrayNum[i/3] + 1; }
//숫자 "i"가 2로 나누어지면 숫자 "i%2"값에 1을 더한값과 현재 가지고 있는 num 값을 비교해서 최소값을 가져온다. if ( i%2 == 0 ) { num = getMinValue(num, arrayNum[i/2] + 1); } //숫자 "i-1"값에 1을 더한값과 현재 가지고 있는 num 값을 비교해서 최소값을 가져온다. num = getMinValue(num, arrayNum[i-1] + 1);
//숫자 "i"에 해당하는 최소값을 넣는다. arrayNum[i] = num; } System.out.println(arrayNum[n]); } static int getMinValue(int num, int temp) {
//num 값이 없는 경우(0일 경우) if (num == 0) { return temp; } return num < temp ? num : temp; } } |
1번 부터 해당하는 번호 까지 최소 횟수를 구하면서
쭉쭉 나아가면 되는 문제 입니다.
주석을 참고해주세요.
'코딩 > 백준 알고리즘' 카테고리의 다른 글
1932번) 숫자삼각형 (0) | 2017.10.03 |
---|---|
9095번) 1, 2, 3 더하기 (0) | 2017.10.03 |
2579번) 계단 오르기 (0) | 2017.10.03 |
1149번) RGB거리 (0) | 2017.10.02 |
1003번) 피보나치 함수 (0) | 2017.10.02 |