-
[Java] 백준 1003 피보나치 함수Programming/Algorithm 2021. 3. 24. 21:30
문제
0이상 40이하의 정수가 주어질 때, 해당 숫자를 가지고 피보나치 함수를 호출한다.
이 때 n이 0과 1에 다다르는 횟수를 출력하는 문제이다.
문제에서 요구하는 바를 재귀로 구현하게 되면 40 level의 트리가 만들어지게 되고 O(40!)이라는 시간 복잡도가 나오게된다. (0.25초 안에 당연히 통과 불가)
따라서 만들어질 수 있는 수들의 규칙을 찾아서 점화식을 만들어야 한다.
N = 0
1 0
N = 1
0 1
N = 2
1 1
N = 3
2 1
위의 숫자를 토대로 0의 개수, 1의 개수를 각각 담는 DP 배열을 만들 수 있다.
N 0 1 2 3 4
[0의 개수] 1 0 1 1 2
[1의 개수] 0 1 1 2 3코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int[][] dp = new int[41][2]; dp[0][0] = dp[1][1] = 1; dp[0][1] = dp[1][0] = 0; for (int i = 2; i < 41; i++) { dp[i][0] = dp[i - 1][0] + dp[i - 2][0]; dp[i][1] = dp[i - 1][1] + dp[i - 2][1]; } int T = Integer.parseInt(br.readLine()); while (T-- > 0) { int num = Integer.parseInt(br.readLine()); sb.append(dp[num][0]).append(' ').append(dp[num][1]).append('\n'); } System.out.println(sb); } }
'Programming > Algorithm' 카테고리의 다른 글
[Java] 백준 1931 회의실 배정 (0) 2021.03.24 [Java] 백준 12852 1로 만들기 2 (0) 2021.03.24 [Java] 백준 11726 2 x n 타일링 (0) 2021.03.19 [Java] 백준 11399 ATM (0) 2021.03.19 [Java] 백준 1149 RGB 거리 (0) 2021.03.16 댓글