-
BOJ) 동물원 (1309, JAVA)알고리즘/백준 2020. 8. 24. 16:44반응형
풀이
코드 라인을 보면 아주 간단한 문제라고 여겨지겠지만, 점화식을 도출하는 것이 어려웠다.
더 사실대로 말하자면, 혼자 도출하지 못했고 다른 풀이에서 점화식을 얻어왔다고 표현하는게 더 맞는 것 같다.
처음에는 Combination과 같은 경우를 찾는 식을 활용하는 방향으로 접근했다.하지만 어떤 식도 부합하는 것이 없었고, n=1 ~ n=4까지 직접 경우의 수를 찾아봤다.
n=1 => 3n=2 => 7n=3 => 17n=4 => 41
위와 같이 경우의 수가 나왔다.위에서 유추할 수 있는 것은, dp[n] = dp[n-1]*2 + dp[n-2] 라는 식이다.n-1의 경우의 수 *2 + n-2의 경우의 수가 되는데, 왜 이 식이 성립하는지는 아직 명확하지 않다.n이 1씩 증가할 때마다, 2칸이 생기기 때문에, 이전의 경우의 수 *2가 되는 것은 알겠지만, n-2만큼 더해주는 경우를 이해하지 못했다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); br.close(); solution(n); } private static void solution(int n) { final int mod = 9901; int[] dp = new int[n+1]; dp[0] = 1; dp[1] = 3; for(int i=2; i<=n; i++) dp[i] = (dp[i-1] *2 + dp[i-2]) % mod; System.out.println(dp[n]); } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 팰린드롬? (10942, JAVA) (0) 2020.08.25 BOJ) ACM 호텔(10250, JAVA) (0) 2020.08.24 BOJ) 바이러스 (2606, JAVA) (0) 2020.08.24 BOJ) 이항 계수 2 (0) 2020.08.08 BOJ) 이동하기 (0) 2020.08.02