주다람
개미는 뚠뚠🎵 오늘도 뚠뚠🎵 열심히 개발하네✨
주다람
전체 방문자
오늘
어제
  • 분류 전체보기
    • 💭 기록해보자
      • BackEnd
      • FrontEnd
      • 회고
    • 💻 수업정리 (2020)
      • 오라클
      • 자바
      • CSS & HTML
      • JavaScript
      • Servlet
      • JSP
    • 📚 알고리즘
      • DP(다이나믹 프로그래밍)
      • 탐색(BFS,DFS)
      • 다익스트라
      • 순열과 조합
      • 백트래킹
      • 이분탐색(binarySearch)
      • 탐욕(Greedy)
      • 스택,큐,덱(Stack,Queue,Deque)
      • 유니온파인드(Union-Find)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 오라클
  • background-gradient
  • 박스모델
  • 그룹함수
  • 함수
  • group by
  • 문자함수
  • 일반함수
  • 날짜함수
  • 숫자함수
  • 변환함수
  • oracle

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
주다람

개미는 뚠뚠🎵 오늘도 뚠뚠🎵 열심히 개발하네✨

📚 알고리즘/DP(다이나믹 프로그래밍)

[백준 11727] 2×n 타일링 2_dp(c++)

2020. 6. 14. 20:40

[문제]

https://www.acmicpc.net/problem/11727

 

11727번: 2×n 타일링 2

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.

www.acmicpc.net

[접근법]

  • 다이나밍프로그래밍이란걸 보자마자 느낌..!
  • 점화식을 찾아내기 위해 애썼음

[문제풀이]

  • 고민하다가 찾은 점화식은
//홀수인경우
		if (i % 2 != 0) {
			memo[i] = ((memo[i-1] * 2) - 1) % 10007;
		}
		else {
			memo[i] = ((memo[i -1] * 2) + 1) % 10007;
		}
  • 근데 알고보니 원리가 따로있었다
  • 경우의 수는 가로가1인 경우와, 가로가2인경우(2x2 사용하거나 2x1) 두가지이다.
  • 가로가 1인 경우의 개수 + 가로가 2인경우의 개수 * 2를 한 값을 dp에 저장해 두면 되는거였음
  • 이런식이라면 3n타일링도 금방 점화식을 찾을 수 있을것같다!
for(int i = 2; i < n; i++){ // 타일의 가로 길이 1 or 2 -> n-1, n-2 이용 / n-2의 경우의 수 2*1와 2*2, 2개 이므로 *2 필요
		dp[i] = (dp[i-1] + ((dp[i-2]) * 2) % 10007) % 10007;
	}

 

[전체코드] 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
int memo[1001];
 
void dp(int n) {
    for (int i = 2; i <= n; i++) {
        //홀수인경우
        if (i % 2 != 0) {
            memo[i] = ((memo[i-1] * 2) - 1) % 10007;
        }
        else {
            memo[i] = ((memo[i -1] * 2) + 1) % 10007;
        }
    }
}
 
int main() {
    int n;
    cin >> n;
    memo[1] = 1; //1가지밖에 없음
 
    dp(n);
    //for(int i = 1; i<=n; i++)
    cout << memo[n] % 10007;
    
 
    return 0;
}
Colored by Color Scripter
cs

'📚 알고리즘 > DP(다이나믹 프로그래밍)' 카테고리의 다른 글

[알고리즘] 동적계획법  (0) 2020.07.04
[백준 11052] 카드구매하기_dp(c++)  (0) 2020.06.27
[백준 2096] 내려가기_dp(c++)  (0) 2020.06.14
[백준 11057] 오르막수_dp(c++)  (0) 2020.05.31
[백준 11048] 이동하기(c++)  (0) 2020.05.24
    '📚 알고리즘/DP(다이나믹 프로그래밍)' 카테고리의 다른 글
    • [알고리즘] 동적계획법
    • [백준 11052] 카드구매하기_dp(c++)
    • [백준 2096] 내려가기_dp(c++)
    • [백준 11057] 오르막수_dp(c++)
    주다람
    주다람
    신입 어린이 -> 주니어개발자 성장중

    티스토리툴바