Files
CodeTest/baekjoon/피보나치_함수/solution_19767507.rs
2024-08-29 16:22:24 +09:00

43 lines
1.2 KiB
Rust

use std::io::{self, BufRead, Write, BufWriter};
fn fib_usage(n: usize, storage: &mut [Option<(usize, usize)>]) -> Option<(usize, usize)>{
if let Some(numbers) = storage[n]{
Some(numbers)
}
else{
let num1 = fib_usage(n - 1, storage).unwrap();
let num2 = fib_usage(n - 2, storage).unwrap();
let num = (num1.0 + num2.0, num1.1 + num2.1);
storage[n] = Some(num);
Some(num)
}
}
fn main(){
let stdin = io::stdin();
let mut lock_in = stdin.lock();
let stdout = io::stdout();
let lock_out = stdout.lock();
let mut buff = BufWriter::new(lock_out);
let mut storage : [Option<(usize, usize)>; 41] = [None; 41];
storage[0] = Some((1, 0));
storage[1] = Some((0, 1));
let mut n = String::new();
lock_in.read_line(&mut n).expect("Failed to read line");
let n = n.trim().parse::<usize>().expect("Not an integer");
for _i in 0..n{
let mut k = String::new();
lock_in.read_line(&mut k).expect("Failed to read line");
let k = k.trim().parse::<usize>().expect("Not an integer");
let numbers = fib_usage(k, &mut storage).unwrap();
buff.write_fmt(format_args!("{} {}\n", numbers.0, numbers.1)).expect("Failed to write");
}
}