-
728x90
DP - 1463, 11726, 11727, 9095, 10844, 11057, 2193, 9465, 2156, 11053, 11055, 11722, 11054, 1912, 2579, 1699, 2133, 9461, 2225, 2011, 11052
출처: https://plzrun.tistory.com/entry/알고리즘-문제풀이PS-시작하기 [plzrun's algorithm]알고리즘 문제풀이(PS) 시작하기
이런건 고수들이나 써야 하지 않나 싶지만, 그래도 1년정도 공부하면서 이 분야를 어떻게 시작해야 할지 써보려 한다. 라고 운을 뗀다음 열심히 내 얘기만 했던 후속편이다. 내 인생사가 궁금하신 분들은 이 글의..
plzrun.tistory.com
백준 알고리즘 9095번 hange Nxxxx -> Main && remove package lines!!!
이클립스에서 작성하면서 문제 이름으로 클래스를 생성하여 풀었기 때문에
클래스 이름을 Main으로 바꾸고, package 부분도 지우고 제출해야 정상적으로 돌아갑니다.
<풀이> - Bottom up
123456789101112131415161718192021222324252627282930package dp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class N9095 { //Bottom uppublic static void main(String[] args) throws NumberFormatException, IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int testn = Integer.parseInt(br.readLine());int d[] = new int[11];d[0] = 0;d[1] = 1;d[2] = 2;d[3] = 4;for(int i=0; i<testn; i++) {int n = Integer.parseInt(br.readLine());for(int j=4; j<n+1; j++) {d[j] = d[j-1] +d[j-2] +d[j-3];}System.out.println(d[n]);}}}Colored by Color Scripter<풀이> - Top down
123456789101112131415161718192021222324252627282930313233343536package dp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class N9095_TD {static int[] d;public static void main(String[] args) throws NumberFormatException, IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int testn = Integer.parseInt(br.readLine());d = new int[11];for(int i=0; i<testn;i++) {int n = Integer.parseInt(br.readLine());d[i] = calculate(n);System.out.println(d[i]);}}public static int calculate(int n) {if(n==1) return 1;else if(n==2) return 2;else if(n==3) return 4;else {d[n] = calculate(n-1) +calculate(n-2)+ calculate(n-3);return d[n];}}}Colored by Color Scriptercs 우선 점화식은 d[n] = d[n-1] +d[n-2] +d[n-3]이다.
점화식을 구하는 과정은 결국 하나하나 세보면서 구했는데,
나는 문제를 이상하게 읽었다...
1) 1, 2, 3 만으로 합을 구성하지 않고, 입력이 n이라면 n미만의 수로 합을 구성하는 방법인줄 알았다.
1번으로 헤매 구한 점화식 2) 1, 2, 3만으로 합을 구성하되, 자기 자신은 포함되지 않는줄 알았다.
ex. 입력이 2라면 1+1 한 가지 방법인줄... 2는 자기자신이므로 포함 X
그러나 문제에 수를 1개 이상 사용하면 된다고 명시되어 있다.
2번으로 헤매 구한 점화식 문제를 잘못 해석하지 않도록 유의해야 한다....
제대로 해석했다면 점화식을 구하는 과정이 크게 어렵지 않고, 다른 분들의 설명도 많다.
-----
구현측면에서도 이슈가 발생했는데, d[]의 크기를 동적으로 결정하려 했는데 런타임 에러가 발생했다.
정적으로 결정하지 않으려면 test case의 수를 받고나서 바로 d[]를 정의하는게 아니라, 케이스를 받고 나서
그 이후에 d[]를 정의하는 방법이 있는데,
문제는 그렇게 하면 동적 프로그래밍의 핵심 이점이 사라진다. 연산의 시간복잡도를 줄이기 위해 d[]를 만들어 값을 저장하는데,
case를 받을때마다 d[]를 만들었다가 다 지우고 다시 연산을 해야하기 때문에 효과적인 프로그래밍이 아니다.
이를 해결하기 위해서는 꽤나 골치아플 것 같은데 이번 문제에서는 정적으로 해결하고 넘어갔다...
(혹시 해결 방법을 아시는 분은 댓글 부탁드립니다...)
Github: https://github.com/jaeuk9407/AlgorithmBOJ
jaeuk9407/AlgorithmBOJ
BaekJoon Online Judge Problems. Contribute to jaeuk9407/AlgorithmBOJ development by creating an account on GitHub.
github.com
'Algorithms' 카테고리의 다른 글
[백준 알고리즘] (DP) 11057번 Java 풀이 (0) 2020.03.15 [백준 알고리즘] (DP)10844번 Java 2가지 풀이 (0) 2020.03.14 [백준 알고리즘] (DP) 11727번 Java 풀이 (0) 2020.03.11 [백준 알고리즘] (DP) 11726번 Java 풀이 (0) 2020.03.11 [백준 알고리즘] (DP) 1463번 Java 풀이 (0) 2020.03.10 댓글