https://www.acmicpc.net/problem/1788
1788번: 피보나치 수의 확장
첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절댓값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절댓값을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
분류 : 구현, 수학
일반적인 피보나치수열 확장으로 음수까지 계산하는 문제
하지만 단순하게 N이 양수일 때 , 음수일 때 각각 10까지 나열해보니 규칙을 찾을 수 있었다.
더보기
import java.io.*;
import java.math.*;
import java.util.*;
class MyScanner {
BufferedReader br;
StringTokenizer st;
public MyScanner() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
}
public class Main {
static PrintWriter out;
public static void main(String[] args) throws IOException {
MyScanner sc = new MyScanner();
out = new PrintWriter(new BufferedOutputStream(System.out));
int N = sc.nextInt();
int MN = Math.abs(N);
long[] fib = new long[MN+1];
for(int i=0;i<fib.length;i++)
{
if(i==0 || i==1)
{
fib[i] = i;
}
else{
fib[i] = (fib[i-1]+fib[i-2])%1000000000;
}
}
if(MN%2==0 && N<0)
{
out.println(-1);
out.println(fib[MN]);
}
else if(MN==0)
{
out.println(0);
out.println(fib[MN]);
}
else
{
out.println(1);
out.println(fib[MN]);
}
out.flush();
}
}
fib[i] = (fib[i-1]+fib[i-2]) %1000000000 부분을 fib[i] = fib[i-1] %1000000000+fib[i-2] %1000000000 식으로 계산했다가 자꾸 틀렸다...
'PS' 카테고리의 다른 글
[BOJ]10974번 : 모든 순열 (0) | 2017.03.29 |
---|---|
[BOJ]11657번 : 타임 머신 (0) | 2017.03.28 |
[BOJ]4195번 : 친구 네트워크 (0) | 2017.03.25 |
[BOJ]1976번 : 여행 가자 (0) | 2017.03.25 |
[BOJ]1717번 : 집합의 표현 (0) | 2017.03.25 |