Algorithm PS/Baekjoon Online Judge
[BOJ/백준] 1788 피보나치 수의 확장 (S3)
kyung.Kh
2024. 7. 3. 23:02
문제
https://www.acmicpc.net/problem/1788
풀이
피보나치 수열을 변형한 문제로 규칙을 구하면 쉽게 풀 수 있다.
n의 값이 짝수이며 음수인 경우, 결과값이 음수로 나온다. n의 값에 대한 F(n)의 결과의 절대값은 n이 음수일 때와 양수일 때가 동일하다.
Code
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
// n이 짝수인 경우에만 음수
if (n < 0 && n % 2 == 0) bw.write("-1\n"); // n이 음수이고 짝수인 경우 -> F(n)=음수
else if(n == 0) bw.write("0\n");
else bw.write("1\n");
n = Math.abs(n); // 어차피 절대값으로 출력해야 되므로(n의 값이 짝수든 홀수든 절댓값은 동일)
bw.write(fibonacci(n) + "");
bw.flush();
bw.close();
}
public static long fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
long[] dp = new long[n+1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = (dp[i-1] + dp[i-2]) % 1000000000; // 일반적인 피보나치와 동일
}
return dp[n];
}
}
728x90