본문 바로가기
알고리즘/백준

[백준 11726] 2xn 타일링 - 자바

by binghe819 2020. 4. 1.

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

 

11726번: 2×n 타일링

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

www.acmicpc.net

 

1. 풀이


처음에 문제만 보고는 당황하게 됩니다..

 

하지만 직접 1부터 세보면서 규칙을 보면 피보나치 수열이 되는 것을 볼 수 있습니다.

 

1 : 1

2 : 2

3 : 3

4 : 5

5 : 8

6 : 13

7 : 21

8 : 34

9 : 55

...

 

주의할 점은 입력값이 1일때도 1을 출력해서, memo의 크기를 입력값+1을 하게되면, 1을 입력했을때 문제가 됩니다. 

 

그러므로, 애초에 memo의 배열 크기를 입력값의 제한인 1000까지만 만들어주면 해결이 됩니다.

 

2. 코드


import java.util.*;

public class Main {
	
	static int[] memo;
	
	static int Fibo(int n) {
		if(n <= 2)
			return memo[n];
		if(memo[n] != 0)
			return memo[n];
		
		return memo[n] = (Fibo(n-2) + Fibo(n-1))%10007;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int num = sc.nextInt();
		
		memo = new int[1001];
		memo[1] = 1; memo[2] = 2;
		
		System.out.println(Fibo(num));
		
		sc.close();
		return;
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준 9251] LCS - 자바  (0) 2020.04.02
[백준 1149]RGB거리 - 자바  (0) 2020.04.02
[백준 1003]피보나치 함수 - 자바  (0) 2020.04.01
[백준 9095]1, 2, 3 더하기 - 자바  (0) 2020.04.01
[백준 1463] 1로 만들기 - 자바  (0) 2020.04.01

댓글