https://www.acmicpc.net/problem/2748

 

2748번: 피보나치 수 2

문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를

www.acmicpc.net

Rust로 PS하기 두번째 문제이다.

 

러스트 깃북을 보다가 피보나치 수 구하기를 만들어 보라길래, 한번 간단하게 짜 보았다.

 

Rust는 역시 input 받는 것부터 난관이다.

 

책 예제대로 String으로 받은 뒤 int로 parse해서 사용했다.

 

 

use std::io;

fn fib(n : i32) {
	let mut a: i64 = 1;
	let mut b: i64 = 1;
	let mut c: i64 = 0;
	for _ in 2..n {
		c = a + b;
		a = b;
		b = c;
	}
	println!("{}", c);

}
fn main() {
	let mut input = String::new();
	io::stdin().read_line(&mut input)
		.expect("read line error");
	let n : i32 = input.trim().parse()
		.expect("Parse error");

	match n {
		1 => println!("1"),
		2 => println!("1"),
		_ => fib(n),
	}
}

코드는 간단했다. _라는 값이 예약어라는 것도 좀 신기했다. (Anything을 뜻하는 듯)

그리고 Match 구문이 switch 구문보다 더 강력하다고 한다.

 

그리고 unnecessary value, syntax에 대하여 강력한 warning으로 내 정신을 쏙 빼놓는다.

 

책만 보면 재미가 떨어지니 이렇게 간혹 코딩을 하면서 진행을 해야겠다.

+ Recent posts