문제
https://programmers.co.kr/learn/courses/30/lessons/12900
풀이
DP 방식으로 풀 수 있다. 코드는 정말 간단한데 점화식을 세우는 게 쉽지 않다.
타일이 가로로 끝나는 것과 세로로 끝나는 것을 분류해보면 아래와 같다.
가로길이가 i일 때, 타일링의 경우의 수는 = i-1의 경우의 수와 i-2의 경우의 수를 합한 것이다.
i-1의 경우의 수에서 세로 타일을 붙임
i-2의 경우의 수에서 가로 타일을 붙임
소스코드
class Solution {
public int solution(int n) {
int answer = 0;
int[] dp = new int[n+1];
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n; i++){
dp[i] = (dp[i-1] + dp[i-2])%1000000007;
}
return dp[n];
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 멀리 뛰기 (Java) (0) | 2021.10.29 |
---|---|
[프로그래머스] 입국심사 (Java) (0) | 2021.10.29 |
[프로그래머스] 야근 지수 (Java) (0) | 2021.10.29 |
[프로그래머스] 추석 트래픽 (Java) (0) | 2021.10.29 |
[프로그래머스] 문자열 압축 (Java) (0) | 2021.10.25 |