CodingTest/백준 온라인 저지(BOJ)

[백준,BOJ 1904] 01타일(JAVA 구현)

뜸부깅 2019. 11. 26. 14:38
반응형

-내 생각

  문제의 이해는 간단했다. 점화식을 찾는 것이 익숙하지 않아서 1부터 증가하면서 경우의 수를 찾아보았다. n이 1일 때 1, 2일 때 2, 3일 때 3, 4일 때 5, 5일 때 8.... 이 경우를 보면 피보나치 수열이라는 것을 알 수 있었다. 즉 점화식을 세워보면 dp [n] = dp [n-1] + dp [n-2]가 된다. 그러나 피보나치수열은 46번째 숫자부터 int의 범위를 넘어서기 때문에 dp에 저장하는 값을 미리 15746의 나머지로 저장해야 한다고 한다.

 

-해법

import java.util.*;

public class Main {
	static int n;
	
	static int dp[]; // 메모이제이션

	public static void main(String[] args)   {
		Scanner sc = new Scanner(System.in);
		
		
		n = sc.nextInt();
		dp = new int[1000001];
		dp[0] = 1;
		dp[1] = 2;
		dp[2] = 3;
		for(int i=3;i<=n;i++) {
			dp[i] = dp[i-1] + dp[i-2]; // 점화식
			dp[i] %= 15746; // int형 범위를 초과하기 때문에 미리 나눠준 후 저장
		}
		
		System.out.println(dp[n-1]);// 0번 인덱스부터 사용하기 때문에 -1 후 출력
	}
	
}