[프로그래머스] 2 x n 타일링 | C++
Algorithm/문제풀이
2023. 1. 3. 14:00
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2 x 1의 타일을 가지고 2 x n의 바닥을 채우는 문제이다.
나의 풀이 전략
동적 계획법으로 푼다.
상세
바닥이 2 x 1이라면, 채우는 경우의 수는 1이다.
바닥이 2 x 2이라면, 채우는 경우의 수는 2이다.
이제 이 두 가지 크기의 바닥을 기반으로 점화식을 세울 수 있다.
크기가 2 x n인 바닥을 채우는 경우의 수를 DP[n]이라 하자.
바닥이 2 x n이라면,
1)
먼저 2 x 1만큼 맨 오른쪽을 채운다. 그리고 나머지 왼쪽을 채운다.
1)의 경우의 수는 바로 DP[n - 1]과 같다.
2)
먼저 2 x 2만큼 맨 오른쪽을 채운다. 그리고 나머지 왼쪽을 채운다.
그런데, 그림 5는 사실 그림 4의 경우에 포함된다. 그림 5는 무시해야 한다.
2)의 경우의 수는 DP[n - 2]와 같다.
따라서 DP[n]은 DP[n - 1]과 DP[n - 2]를 합한 것과 같다.
전체 소스코드
#include <memory.h>
using namespace std;
int solution(int n)
{
int answer = 0;
int DP[60001];
memset(DP, 0, sizeof DP);
DP[1] = 1;
DP[2] = 2;
for(int i = 3; i <= n; ++i)
DP[i] = (DP[i - 2] + DP[i - 1])%1000000007; // 문제 제한사항
answer = DP[n];
return answer;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[프로그래머스] 피로도 | C++ (0) | 2023.01.11 |
---|---|
[프로그래머스] 소수 찾기 | C++ (2) | 2023.01.07 |
[프로그래머스] JadenCase 문자열 만들기 | C++ (0) | 2022.12.26 |
[프로그래머스] 다음 큰 숫자 | C++ (0) | 2022.12.26 |
[프로그래머스] 다리를 지나는 트럭 | C++ (0) | 2022.12.23 |