1. 오늘 학습한 내용
백준 동적프로그래밍 9184번 신나는 함수 실행 문제
2. 알게 된 내용
1) 재귀 함수는 문제에서 주어진 그대로 이용해도 되고, 이전에 계산했던 값들만 이용하려고 시도하면 된다. 따라서 a,b,c에 따른 결과 값을 저장하는 3차원 dp배열을 만들 것이다. 이때 w 함수를 잘 보면 a,b,c 값이 0보다 크고 20보다 작은 경우에만 취급해서 작업을 하는 것을 알 수 있다. 따라서 0 ~ 20까지의 경우를 담을 수 있도록, int[21][21][21] 크기로 필요하다.
2) 그리고 결과 값을 리턴하기 전에 dp 배열에 담은 후 리턴하는 것을 잊지 말자!
return dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
3) a,b,c 값이 0 ~ 20 사이의 값인지를 판단해줘야 한다. 이를 조금 더 보기 편하게 다른 메서드로 빼서 작업해도 된다.
static boolean inRange(int a, int b, int c) {
return 0 <= a && a <= 20 && 0 <= b && b <= 20 && 0 <= c && c <= 20;
}
출처 : https://st-lab.tistory.com/190
BufferedWriter도 효율이 좋지만 더 뛰어난 것은 StringBuilder이다! 이 문제를 채점해보면서 다양한 출력방법을 사용해보았는데 StringBuilder를 사용했을 때 시간이 확 단축되었다. 앞으로 StringBuilder를 사용해보도록 해야겠다.
참고 : https://hardlearner.tistory.com/288