728x90
🟦 백준 11726번. 타일 채우기
문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
풀이
- 문제 분석 : 2 X N 크기의 직사각형을 1 X2 or 2 X 1 크기의 타일로 채우는 경우의 수를 구하는 문제이다.
1) D[N] = 2 X N크기의 직사각형을 타일로 채울 수 있는 경우의 수
2) D[1] = 1. D[2] = 2. D[3] = 3. D[4] = 5 … 이런 식으로 확장된다.
규칙성이 보인다. 즉. D[i] = D[i-1] + D[i-2] 이다.
3) 점화식으로 for(int i=3~N)까지 D[] 배열의 값들을 미리 도출해낸다. 이때 문제에서 각 도출한 결과에 10,007의 mod 연산을 해야한다는 사실 잊지 말것
4) 마지막에 D[N] 결과를 뽑으면 된다.
import java.util.Scanner;
/* 백준 11726번. 2Xn 타일링
* */
public class Main {
//MOD 는 long타입으로 선언할 것 *** RunTIme 에러 발생 안하게
static final long MOD = 10007;
//실행 메인
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner kb = new Scanner(System.in);
int N = kb.nextInt();//타일링
//D long 타입
long [] D = new long[1001];//N의 크기는 최대 1000 이므로 : 이거 때문에 자꾸 RunTime 에러 발생
D[0]=0;
D[1]=1;
D[2]=2;
for(int i=3; i<=N; i++) {
D[i] = (D[i-1] + D[i-2]) % MOD;//나눈 결과값
}
System.out.println(D[N]);
}
}
728x90
'코딩 테스트 [준비] > [문풀] Baekjoon_백준 문풀_조지기' 카테고리의 다른 글
백준 | 9252번. LCS - 최장 공통 부분 수열 찾기 - DP 문제 (0) | 2023.07.14 |
---|---|
백준 | 10844번. 계단 수 구하기 - DP 문제 (0) | 2023.07.12 |
백준 | 9095번. 1, 2, 3 더하기 - DP 문제 (0) | 2023.07.11 |
백준 | 1922번. 네트워크 연결 - 최소비용 신장트리 (0) | 2023.07.07 |
백준 | 2660번. 회장 뽑기 - 플로이드-워샬 (0) | 2023.07.06 |