- 생각
알고리즘을 처음 시작할 때쯤 풀었던 문제였다. 재채점되면서 틀리게 된 문제이다.
질문검색에서 찾아보니 기존 코드는 아래와 같은 방법에서 오답의 결과를 냈다.
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);
'algorithm' 카테고리의 다른 글
[BOJ/JAVA] 백준 11726 : 2 x n 타일링 (0) | 2021.01.06 |
---|---|
[BOJ/JAVA] 백준 11727번 : 2 x n 타일링 2 (0) | 2021.01.06 |
[BOJ/JAVA] 백준 17142번 : 연구소 3 (0) | 2021.01.05 |
[BOJ/JAVA] 백준 1339번 : 단어 수학 (0) | 2021.01.04 |
[BOJ/JAVA] 백준 2448번 : 별찍기 - 11 (0) | 2020.12.24 |