백준 알고리즘 1003번 입니다. ( 참고 - https://www.acmicpc.net/problem/1003 )
C 코드 )
#include <stdio.h>
int fibo(int n);
int cnt0 = 0, cnt1 = 0;
int main() {
int count, i, num;
scanf_s("%d", &count);
for (i = 0; i < count; i++) {
scanf_s("%d", &num);
fibo(num);
printf("%d %d\n", cnt0, cnt1);
cnt0 = 0, cnt1 = 0;
}
return 0;
}
int fibo(int n) {
if (n == 0)
cnt0++;
else if (n == 1)
cnt1++;
else
return fibo(n - 1) + fibo(n - 2);
}
먼저, main에서 count 를 입력받아 총 몇 회 반복할 것인지 입력받게 합니다.
for문 안에서 num을 입력받아 미리 만들어 준 fibo함수에 파라미터로 넘겨줌으로써 해당 함수를 안에서 수행 한 뒤, cnt0, cnt1은 다시 0으로 초기화해줍니다.
fibo함수는 main에서 넘어온 파라미터인 num을 받아서, 0과 1이 아닐때는 기본적인 재귀호출을 통하여 처리하게 되고,
만약 num이 0 또는 1이 되었을 때에는 cnt0, cnt1이라는 변수를 통해 총 몇번 호출되었는지 알 수 있도록 합니다.
이 때 중요한 것은 cnt0과 cnt1은 전역변수로 선언되어져 fibo함수에서 cnt0, cnt1에 저장된 값을 기억하고 있어야만
main에서 fibo(num); 을 호출 한 뒤, printf로 cnt0과 cnt1을 출력해 줄 수 있게 됩니다.
대개 큰 프로그램을 구현 시 전역변수로 선언하는 것은 좋은 방법이 아님을 미리 말씀드리지만, 위와 같이 간단한 코드를 구현할 때에는 효과적으로 사용할 수 있습니다.
++) Java
public class algo1003 {
private static int cnt0 = 0;
private static int cnt1 = 0;
public static int fibo(int num) {
if (num == 0) {
cnt0++;
return 0;
} else if (num == 1) {
cnt1++;
return 1;
} else
return fibo(num - 1) + fibo(num - 2);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int loop = sc.nextInt();
for (int i = 0; i < loop; i++) {
fibo(sc.nextInt());
System.out.print(cnt0 + " ");
System.out.println(cnt1);
cnt0 = 0;
cnt1 = 0;
}
}
}
'Programming > Algorithm' 카테고리의 다른 글
백준 알고리즘 - 1026번 : 보물 (0) | 2016.04.18 |
---|---|
백준 알고리즘 - 1015번 : 수열 정렬 (0) | 2016.04.18 |
백준 알고리즘 - 1009번 : 분산처리 (1) | 2016.04.18 |
백준 알고리즘 - 1008번 : A/B (0) | 2016.04.18 |
백준 알고리즘 - 1000번 : A+B (0) | 2016.04.18 |
WRITTEN BY