728x90
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
![](https://blog.kakaocdn.net/dn/NQlCO/btrwjnkNJpg/U4RuFNGEFHUz7GkAuNKLiK/img.png)
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
풀이
/*
* 입력
* 1. n
* 출력
* 1. 2xn 크기의 직사각형을 채우는 방법의 수를 10007로 나눈 나머지
* 조건
* 1. 1x2, 2x1로만 채워야 함
*
* >> 1 2 3 5 8 13...
*/
역시 모르는 문제가 나왔을 때는 무조건 써보는게 직빵이다
![](https://blog.kakaocdn.net/dn/BrtbA/btrwnrsetiO/0X8rcU9KMmsFRpHzkJVbB0/img.jpg)
이렇게 1 2 3 5 8 13 순서로 DP[i] = DP[i-1] + DP[i-2] 공식이 나오게 된다 10007로 나눈 나머지를 각각 구해야 하니 for문 안에서 구해 주면 된다
코드
package A형대비;
import java.io.*;
import java.util.*;
public class s3_11726_2xn타일링 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] DP = new int[1000];
DP[0] = 1;
DP[1] = 2;
for(int i = 2; i<N; i++) {
DP[i] = (DP[i-1] + DP[i-2])%10007;
}
System.out.println(DP[N-1]);
}
}
결과
#자바 #java #boj #백준 #알고리즘
728x90
'알고리즘 > BOJ' 카테고리의 다른 글
[java][boj][s3] 2193. 이친수 (0) | 2022.03.19 |
---|---|
[java][boj][s4] 10816. 숫자 카드 2 (0) | 2022.03.18 |
[java][boj][s3] 9095. 1, 2, 3 더하기 (0) | 2022.03.17 |
[java][boj][s4] 1920. 수 찾기 (0) | 2022.03.16 |
[java][boj][s2] 1912. 연속합 (0) | 2022.03.15 |