백준 알고리즘 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;

        }

    }

}


WRITTEN BY
SiriusJ

,