<링크>
https://school.programmers.co.kr/learn/courses/30/lessons/12900
<문제>
- 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다.
- 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다.
- 타일을 가로로 배치 하는 경우
- 타일을 세로로 배치 하는 경우
- 예를들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다.
- 직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.
<제한사항>
- 가로의 길이 n은 60,000이하의 자연수 입니다.
- 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.
<입력 및 출력>
n | return |
4 | 5 |



<아이디어>
- dp dp dp dp
- 직접 그림을 그리면 큰 도움이 되더군요.. 경우의 수를 예시 문제까지 꼭 그려보세요..ㅎ
<풀이 - Java >
class Solution {
public int solution(int n) {
// 영어이름이 기억이 안나니 넌 나누기다.
int 나누기 = 1000000007;
// 데이터 값 저장해놓을 녀석
int[] dp = new int[n+1];
// 가로길이 1인 녀석을 만드는 방법은 1개..
dp[1] = 1;
// 가로길이 2인 녀석을 만든느 방법은 가로로 2개 놓고, 세로로 1개 놓고 그위에 하나 놓고 끝!
dp[2] = 2;
// 나머지는 뭐...똑같겠지.. 돌려.
for(int i = 3; i<=n; i++){
dp[i] = (dp[i-1]+ dp[i-2]) % 나누기;
}
int answer = dp[n];
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
<프로그래머스> 땅따먹기 (0) | 2024.10.09 |
---|---|
<프로그래머스> 정수 삼각형 (0) | 2024.10.09 |
<프로그래머스> 피보나치 수 (0) | 2024.10.09 |
<프로그래머스> 롤케이크 자르기 (0) | 2024.10.03 |
<프로그래머스> 캐릭터의 좌표 (1) | 2024.10.03 |