본문 바로가기

Study/Baekjoon & SW Expert Academy

[백준 : 10872번 팩토리얼, 10870번 피보나치 수 5]

 

오늘 가져온 문제는 2개인데요!

2 문제 모두 재귀 문제에 분류되어 있는 문제들입니다.

 

하나는 10872번인 팩토리얼 문제이고, 또 다른 하나는 10870번인 피보나치 수 5 입니다.

 

그럼 문제를 먼저 살펴 보시죠~~

 

10872번 문제 출처 : 

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

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

10872번 팩토리얼

 

 

10870문제 출처:

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

 

10870번: 피보나치 수 5

피보나치 수는 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

 

 

10870번 피보나치 수 5

 

 

 

 

자 문제를 살펴 봤으니, 어떤 식으로 풀어야 할 지 생각을 해봅시다!

10872번의 경우 말 그래도 팩토리얼을 구하는 문제인데요!

 

팩토리얼은 1부터 n까지의 자연수의 곱을 나타내는 함수인데요.

우리는 n을 받을 것이기 때문에 n부터 1까지의 곱으로 생각하면 되겠군요!

 

재귀함수로 표현을 해본다면

factorial(n) = n * factorial(n-1) 

이와 같이 하면 될 것 같습니다.

 

 

그럼 밑에 내리면 제 코드가 있으니 본인의 코드와 비교해 보시고

더 좋은 방법이 있다면 알려주세요!

 

 

·

·

·

·

·

 

#include <iostream>
using namespace std;

int factorial(int num) {

	if (num == 1) return 1;

	if (num == 0) return 1;

	return num * factorial(num - 1);
}

int main() {

	int n;	//팩토리얼 할 숫자

	cin >> n;
	cout << factorial(n) << "\n";

	return 0;
}

 

 

 

다음은 10870번에 대해서 생각해 보겠습니다.

문제에 피보나치 수에 대해서 자세하게 설명이 되있군요.

 

피보나치 수는 이 전과 그 전 값을 더한 값입니다. 

n은 2 이상이므로 0과 1일때만 정의해 주면 되겠습니다.

0일때는 0이고 1일때는 1로 말이죠!

 

밑에는 제가 짠 간단한 코드입니다!

 

 

·

·

·

·

·

 

#include <iostream>
using namespace std;


int fibonacci(int num) {

	if (num == 0) return 0;
	if (num == 1) return 1;

	return fibonacci(num - 1) + fibonacci(num - 2);
}

int main() {

	int n;		//n번째 피보나치 수

	cin >> n;

	cout << fibonacci(n) << "\n";

	return 0;
}

 

 

 

 

자! 오늘은 간단한 재귀함수 문제를 백준에서 가져와 봤습니다.

누구나 1번쯤은 들어봤을 함수를 직접 짜보니 재밋지 않으셨나요?

 

다음번에도 익숙하고 재밋는 재귀문제 1개를 가져올 것 같아요~

즐거운 하루 되세요!