YunDev

백준 9506번[C] - 상세 풀이 본문

Programming/Baekjoon Program

백준 9506번[C] - 상세 풀이

S준 2024. 1. 21. 15:23

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

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net


#include <stdio.h>

int main() {
    int n = 0, sum = 0;
   
    while(1) {
        scanf("%d", &n);
    
       sum = 0;

        if(n == -1) {
            break;
        }   
        //자기 자신을 제외한 약수의 합을 더함
        for(int i = 1; i < n; i++) {
            if(n % i == 0) {
                sum+=i;
            }
        } 
        //n이 완전수일 경우 약수를 출력함
        if(sum == n) {
            printf("%d = ", n);
            for(int i = 1; i < n; i++) {
                if(n % i == 0) {
                    printf(i != n-i ? "%d + " : "%d", i);
                }
            }
        } else {
            printf("%d is NOT perfect.", n);
        }
        
        printf("\n");
    }

    return 0;
}

풀이 : 문제에서 제시된 "완전수"의 의미는 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 합니다. 따라서 입력을 받으면 입력받은 값 n을 제외한 n의 모든 약수들의 합을 구하고, 그 합이 n과 같다면 약수들을 출력하여 풀면됩니다. 다만 마지막 약수일 경우 + 기호를 빼주어야 하므로 약수 중에서 가운데에 위치하는 경우 (i != n-i ? "%d + " : "%d", i) 이 조건에서 거짓이 되므로 i만 출력할 수 있게됩니다.

'Programming > Baekjoon Program' 카테고리의 다른 글

백준 1269번[C] - 상세 풀이  (2) 2024.01.23
백준 5073번[C] - 상세 풀이  (0) 2024.01.22
백준 5086번[C] - 상세 풀이  (0) 2024.01.20
백준 1978번[C] - 상세 풀이  (1) 2024.01.19
백준 2581번[C] - 상세 풀이  (0) 2024.01.18