코딩/백준 문제 (브론즈)

[백준/9506/C언어] 약수들의 합 _ 풀이

룻밤 2023. 8. 21. 19:50

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

 

9506번: 약수들의 합

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

www.acmicpc.net


풀이

#include <stdio.h>

int main() {
	int t;
	int total = 0, cnt = 0;

	while (1) {		// -1 입력전까지 반복
		scanf("%d", &t);
		int m[10000]={};		// 약수를 저장할 배열, 초기화
		if(t==-1) break;		// -1일때 종료
		
		// 약수 찾아서 m배열에 저장
		for (int j = 1; j < t; j++) {
			if (t / j > 0 && t % j == 0) {
				m[cnt] = j;
				total += j;		// 완전수 확인을 위한 total
				cnt++;
			}
		}
		
		if (total == t) {		// t가 완전수라면
			printf("%d = ", t);
			for (int j = 0; j < cnt; j++) {
				if (j == cnt - 1) printf("%d", m[j]);	// t의 마지막 약수일때
				else printf("%d + ", m[j]);
			}
		}
		else printf("%d is NOT perfect.", t);		// 완전수가 아닐때
		printf("\n");
		total = 0;		// 초기화
		cnt = 0;		// 초기화
	}
	return 0;
}

문제 구성이 귀찮은 문제다.