와.. 문제를 푸는데 2시간이 걸렸다.
코드에 변화가 2번이 일어났는데, 처음에는 subproblem을 너무 쉽게 생각했고,
그 다음에는 반복문 내용을 수정했다..
풀이 방법은
위에 1x2랑 1x1로 채우고 밑에를 n-1로 해줘서 d[n-1] * 2
그리고 2x1, 1x1로 채우고 밑에를 n-2로 채워서 d[n-2] * 3
그리고 1x2, 2x1, 1x1을 전부 사용해 위에를 채운건 d2[n-1]+d[n-3] * 2
합치면 d[n-1]*2+d[n-2]*3+(d2[n-1]+d[n-3])*2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.util.*; | |
/** | |
* BOJ 14852 타일채우기 3 | |
* https://gist.github.com/KSH-code/aaf918ce45a1ca3da9705f4a83aae78b | |
*/ | |
public class Main{ | |
private static final int MOD = (int)(1e+9)+7; | |
public static void main(String[] args) throws IOException{ | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
int N = Integer.parseInt(br.readLine()); | |
long dp[] = new long[N+10]; | |
long dp2[] = new long[N+10]; | |
dp[1]=2; | |
dp[2]=7; | |
dp[3]=22; | |
dp2[3]=1; | |
for(int i = 4; i<=N; i++){ | |
dp2[i] = (dp2[i-1]+dp[i-3])%MOD; | |
dp[i] = (dp[i-2]*3+dp[i-1]*2+dp2[i]*2)%MOD; | |
} | |
System.out.println(dp[N]); | |
} | |
} |
'IT > 알고리즘' 카테고리의 다른 글
BOJ 2016 풀이 2004 (한국정보올림피아드시․도지역본선) (0) | 2017.10.19 |
---|---|
BOJ 11657 타임머신 풀이 벨만 포드 (0) | 2017.10.19 |
BOJ 2309 일곱난쟁이 풀이 (0) | 2017.10.18 |
BOJ 2065 줄 세우기 (0) | 2017.10.18 |
BOJ 11404 플로이드 Floyd-Warshall (0) | 2017.10.18 |