백준

백준 9506번: 약수들의 합 (C언어)

NamDoHyeon 2023. 9. 10. 00:51

백준 9506번: 약수들의 합 링크

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

문제를 풀기 전 생각한 것

테스트 케이스마다 한 줄 간격
2 < n < 100,000
-1로 종료
약수를 구할 방법과 저장할 배열 만들기
출력을 어떻게 할지

풀면서 어려웠던 점

배열과 변수를 while 문 밖에서 초기화해서 다음 케이스 실행 때 결과가 다르게 나왔다

코드

#include <stdio.h>

int main(void) 
{
    int n = 0;

    while(1) {
        scanf ("%d", &n);

        if (n < 3 || n > 99999 || n == -1) {
            break;
        }

        int ans[50] = {0};
        int temp = 0, count = 0;

        for (int i = 1; i < n; i++){
            if (n % i == 0){
                ans[count++] = i;
                temp += i;
            }
        }

        if (temp == n) {
            printf("%d = ", n);

            for (int j = 0; j < count; j++) {
                printf("%d", ans[j]);
                if (j != count - 1) {
                    printf(" + ");
                }
            }
            printf("\n");
        }

        else {
            printf("%d is NOT perfect.\n", n);
        }
    }

    return 0;
}

풀면서 배운 점

연속으로 다른 결과를 출력해야 할 땐 초기화를 반복문 안에서 하자

반응형