알고리즘 문제풀이/백준

#11726 : 2 x n 타일링

모항 2022. 2. 22. 13:24

풀이방법

사용된 것:

동적 프로그래밍

 

2022.02.22

피보나치 수열 문제와 비슷한 문제이다.

주어진 숫자가 n일 때 문제의 답을 f(n)이라 하면,

f(n) = f(n-1) + f(n-2) 이다. (단 f(1) = 1, f(2) = 2)

 

이를 재귀함수로 구현하면 시간초과가 발생한다.

1 ≤ n ≤ 1000 이므로, 길이가 1000 이상인 배열에 미리 f(1) ~ f(1000)을 모두 구해 저장해둔 뒤 거기서 값을 꺼내어 출력하면 된다.

 

나는 편의를 위해 길이가 1000이 아닌 1001인 배열을 사용하였다. k번 인덱스의 위치에 f(k)가 저장되게 하기 위해서이다.

 

코드

Java(2022.02.22)

import java.io.*;

public class Main {

	static int[] nums;
	
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		nums = new int[1001];
		
		nums[1] = 1;
		nums[2] = 2;
		
		for(int i = 3; i<1001; i++) {
			nums[i] = (nums[i-1] + nums[i-2])%10007;
		}
		
		int n = Integer.parseInt(br.readLine());
		System.out.print(nums[n]);
	}
	
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#11399 : ATM  (0) 2022.02.24
#15681 : 트리와 쿼리  (0) 2022.02.23
#1931 : 회의실 배정  (0) 2022.02.14
#14425 : 문자열 집합  (0) 2022.02.14
#2606 : 바이러스  (0) 2022.02.08