static을 사용하지 않고 문제를 풀기

조회수 346회
int main(void){
    static int GCD;
    int num1, num2;
    printf("두 수를 입력하시오 :");
    scanf_s("%d %d", &num1, &num2);

    if (num1 > num2) {
        int num3 = num2;
        num2 = num1;
        num1 = num3;
    }
    for (int i = 1; i < num1 + 1; i++) {
        if (num2 % i == 0 && num1 % i == 0) {
            GCD = i;
        }
    }
    printf("\n두 개의 정수 : %d, %d", num1, num2);
    printf("\n두 수의 최대공약수 : %d", GCD);
}

이런 식으로 제가 static을 써서 GCD를 구하는 방법을 만들었는데요. 개인적으로 static 변수를 사용하지 않고 문제를 푸는 방법이 있는지 궁금합니다.

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    C언어에서 static변수라는것은 함수 내부의 변수값을 유지시키고자 하는 경우 사용하는것입니다.

    아래는 이해를 쉽게 하기 위한 예제 코드입니다.

    #include <stdio.h>
    
    int a() {
        static int x = 0;
        x++;
        return x;
    }
    
    int b() {
        int x = 0;
        x++;
        return x;
    }
    
    int main() {
        printf("%d\n", a());
        printf("%d\n", a());
        printf("%d\n", a());
        printf("%d\n", b());
        printf("%d\n", b());
        printf("%d\n", b());
    }
    

    출력 결과는

    1
    2
    3
    1
    1
    1
    

    입니다.

    따라서 올려주신 코드에서는 static int GCD; 대신 int GCD;를 사용해도 같은 결과가 도출됩니다.

    또한, 유클리드 호제법이라는 방법을 이용하여 최대 공약수를 올려주신 코드보다 더 효율적으로 구하는 방법이 있습니다.
    시간날때 한번 읽어보시면 재밌을것으로 생각됩니다.

    • 감사합니다. static에 대한 이해가 부족했네요. 덕분에 다시 공부했습니당. 유클리드 호제법도 읽어봤는데 도움이 됐어요 ㅎㅎ Will-Big 2020.3.8 01:17

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)