※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 24417번 문제인 알고리즘 수업 - 피보나치 수 2이다.

문제는 아래 링크를 확인하자.

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

 

24417번: 알고리즘 수업 - 피보나치 수 2

코드1 코드2 실행 횟수를 1,000,000,007로 나눈 나머지를 한 줄에 출력한다.

www.acmicpc.net

첫 번째 의사코드는 결국 1들의 합으로 N번째 피보나치 수를 계산해내므로 "코드1"은 N번째 피보나치 수와 같은 횟수만큼 실행된다. 코드2와 같은 방식으로 N번째 피보나치 수(mod N)을 계산하고 출력해주자.

 

두 번째 의사코드는 N이 1 또는 2라면 실행되지 않을 것이고, 그렇지 않다면 반복문의 횟수만큼 실행될 것이므로 N-2회 실행될 것이다. 문제의 입력조건에서 N은 5 이상으로 주어졌으므로 N-2를 출력하게 구현해도 무방하다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N; cin >> N;
	ll A = 1, B = 1;
	for (int i = 2; i < N; i++) {
		ll tmp = A + B;
		if (tmp > 1000000006) tmp -= 1000000007;
		swap(A, B); swap(B, tmp);
	}

	cout << B << ' ' << N - 2;
}
728x90

+ Recent posts