정보처리기사 실기 - 2022년 3회 C언어 기출 풀이(완전수 찾기 문제)

Alchemist·2025년 9월 11일

정보처리기사

목록 보기
16/114

✨ 문제

다음 C 프로그램에서 출력 결과를 쓰시오.

#include <stdio.h>

int main(void) {
    int n;
    int k;
    int s;
    int el = 0;
 
    for(n=6; n<=30; n++){
        s=0;
        k=n/2;
        for(int j=1; j<=k; j++){
            if(n%j==0){
                s=s+j;
            }
        }
        if(s==n){
            el++;
        }
    }
  
    printf("%d", el);
    return 0;
}

🎯 출제 의도

  • for 반복문중첩 반복 이해
  • 나머지 연산자(%)를 이용한 약수 판별
  • 약수의 합을 이용한 완전수(perfect number) 판별 이해
  • 조건문과 누적 변수를 활용해 결과를 도출하는 과정 확인

📘 개념 정리

1. 변수

  • n : 검사할 현재 수
  • k = n/2 : 약수를 검사할 최대 범위 (n의 절반까지만 보면 됨)
  • s : 약수들의 합
  • el : 완전수 개수 누적

2. 완전수(Perfect Number)

  • 정의: 자기 자신을 제외한 약수의 합이 자기 자신과 같은 수
  • 예시:
    • 6 = 1+2+3
    • 28 = 1+2+4+7+14

3. 중첩 반복문

  • 바깥 for문: n을 6부터 30까지 검사
  • 안쪽 for문: j=1부터 j<=n/2까지 나눠보며 약수 판별

4. 나머지 연산자 %

  • if(n % j == 0) → j가 n을 나누어떨어뜨리면 j는 약수
  • 약수라면 s += j

5. 조건문으로 완전수 판별

if(s == n){
    el++;
}
  • 약수들의 합 s가 n과 같으면 완전수
  • 개수 카운트 el 증가

📝 풀이 과정

  • 검사 범위: n=6 ~ 30

  • n=6 → 약수 1+2+3 = 6 → 완전수 ✅

  • n=28 → 약수 1+2+4+7+14 = 28 → 완전수 ✅

  • 그 외에는 완전수가 아님

따라서 완전수 개수 el = 2


✅ 최종 출력 결과

2

💡 정리

이 문제에서 꼭 알아야 할 개념:

  • for문 중첩으로 모든 약수 검사
  • % 연산자로 약수 판별
  • 완전수의 정의
  • 범위 내 완전수는 6, 28 → 총 2개
profile
html_programming_language

0개의 댓글