프로그래머스의 2xn타일링(Lv3) 문제이다.
[ 문제풀이 ]
먼저 규칙을 한번 찾아보자.
n = 1 일 경우를 보게 되면 한가지 경우밖에 존재하지 않는다.
n = 2 일 경우를 보게 되면 2가지 경우가 존재한다.
.
n = 3 일 경우를 보자.
.
위와 같이 3가지 경우가 존재한다.
즉 ! n = 3일 경우를 보게되면, 2x1짜리 타일로 만드는 경우 1가지 + 2x2짜리 2개와 2x1짜리 타일 1개로 만드는 경우 2가지
해서 총 3가지가 나오게 된다.
간단한 규칙을 찾아보게 되면 n의 값을 찾기 위해서는 n - 1로 만들 수 있는 경우의 수 + n - 2로 만들 수 있는 경우의 수
라는 것을 알 수 있다.
이런 규칙을 점화식으로 이용해서 Dynamic Programming방법으로 구현해 주었다.
주의해야 할 것은, 최종 결과값을 주어진 값으로 Moduler 연산을 진행해서 구해야 하는데, 구하는 중간과정에서 이미 int형의
범위를 넘을 수 있기 때문에, 중간중간 과정에서 Moduler 연산을 진행해 주어야 한다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<string> #include<vector> #define MODULER 1000000007 using namespace std; int solution(int n) { int Tile[60010] = { 0, }; Tile[1] = 1; Tile[2] = 2; for (int i = 3; i <= n; i++) { Tile[i] = (Tile[i - 2] + Tile[i - 1]) % MODULER; } return Tile[n]; } | cs |
'[ Programmers Code ] > # PG - Level3' 카테고리의 다른 글
[ 프로그래머스 섬 연결하기 (Lv3) ] (C++) (0) | 2020.05.20 |
---|---|
[ 프로그래머스 타일 장식물 (Lv3) ] (C++) (0) | 2020.05.19 |
[ 프로그래머스 네트워크 (Lv3) ] (C++) (0) | 2020.05.19 |
[ 프로그래머스 N으로 표현 (Lv3) ] (C++) (1) | 2020.05.16 |
[ 프로그래머스 종이접기 (Lv3) ] (C++) (0) | 2020.05.16 |