• 생각

알고리즘을 처음 시작할 때쯤 풀었던 문제였다. 재채점되면서 틀리게 된 문제이다.

 

질문검색에서 찾아보니 기존 코드는 아래와 같은 방법에서 오답의 결과를 냈다.

642 // 정답: 10, 오답: 11

643 // 정답: 11, 오답: 12

생각해보니 문제는 3과 2 모두가 떨어질 때 발생했다. 기존 코드는 if, if로 한것이 아닌 if, else if로 해서 6의 배수일 경우 2, 3으로 떨어지는 경우를 모두 체크를 해야했는데 그러지 못했었다.

 

  • 처음 코드
import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
    	Scanner scanner = new Scanner(System.in);
        
    	int X = scanner.nextInt(); //정수 값 받아옴
    	int[] array = new int[X+1];		//배열 선언
    	
    	for(int i = 2; i<=X;i++) {
			array[i] = array[i - 1] + 1;
			if (i % 3 == 0)
				array[i] = Math.min(array[i], array[i / 3] + 1);
			else if (i % 2 == 0)
				array[i] = Math.min(array[i], array[i / 2] + 1);
    	}
    	System.out.println(array[X]);
		
	}
}

 

 

  • 나중 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static int X;
	static int[] array;

	public static void main(String[] args) throws Exception {
		SetData();
		System.out.println(array[X]);
	}

	private static void SetData() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		X = Integer.parseInt(br.readLine());
		array = new int[X + 1];
		
		for (int i = 2; i <= X; i++) {
			array[i] = array[i - 1] + 1;
			if (i % 2 == 0)
				array[i] = Math.min(array[i], array[i / 2] + 1);
			if (i % 3 == 0)
				array[i] = Math.min(array[i], array[i / 3] + 1);
		}
	}
}

 

 

 

- 정리

  - java 입력 받는 법

import java.util.Scanner;   //import

    	Scanner scanner = new Scanner(System.in);
	int X = scanner.nextInt(); //정수 값 받아옴

  - 최소값 가져오는 법

 Math.min(변수 1, 변수 2);

+ Recent posts