삐까냥의 파도타기

1463번) 1로 만들기 본문

코딩/백준 알고리즘

1463번) 1로 만들기

금손형아 2017. 10. 2. 15:17



문제 출처 : 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