[실전 문제] 직사각형배치의경우의수
2021. 2. 25. 13:51ㆍ코딩 테스트/실전 문제
1. 문제
2 x N 직사각형 모양의 칸이 있다. 이를 2 x 1 모양의 타일로 가득 채우려 한다. 가능한 경우의 수를 출력하는 프로그램을 작성하시오. 단, 가능한 경우의 수가 매우 많을 수 있으므로, 그 경우의 수를 1,000,007 로 나눈 나머지를 출력한다.
예를 들어, N = 3 일 경우에는 다음 세 가지의 가능한 경우가 존재한다.
입력
첫 번째 줄에 N이 주어진다. ( 1 ≤ N ≤ 100 )
출력
가능한 경우의 수를 1,000,007 로 나눈 나머지를 출력한다.
예제 입력
case 1) 3
case 2) 8
case 3) 37
예제 출력
case 1) 3
case 2) 34
case 3) 87896
2. 풀이
전형적인 피보나치 수열 문제이다.
import java.io.*;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(br.readLine());
// Bottom-Up
int[] arr = new int[105];
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
for (int i = 4; i <= n; i++) {
arr[i] = (arr[i - 1] + arr[i - 2]) % 1000007;
}
bw.write(arr[n] + "");
br.close();
bw.flush();
bw.close();
}
/*
// Top-Down 방식
private static int squareBatch(int n) {
if(n == 0) return 0;
if(n == 1) return 1; // n = 1일 때
if(n == 2) return 2; // n = 2일 때
if(n == 3) return 3; // n = 3일 때
return (squareBatch(n-1) + squareBatch(n-2)) % 1000007;
}
*/
}
728x90
'코딩 테스트 > 실전 문제' 카테고리의 다른 글
[실전 문제] 자원 채취 (0) | 2021.02.27 |
---|---|
[실전 문제] 제곱수의 합 (0) | 2021.02.25 |
[실전 문제] 버튼 누르기 (0) | 2021.02.25 |
[실전 문제] 카드 놀이 (0) | 2021.02.24 |