문제 번호 9506번 : 약수들의 합 - JAVA [자바]
728x90
https://www.acmicpc.net/problem/9506
9506번: 약수들의 합
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
www.acmicpc.net
문제 설명
약수를 모두 찾고 그 수의 합과 수를 비교하는 문제입니다.
문제 풀이
약수는 반복문으로 모두 나눠서 확인하고 해당 수와 비교하면 쉽게 풀 수 있는 문제입니다.
풀다 보면 자연스럽게 정답으로 갈 수 있으실 겁니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
StringBuilder stb = new StringBuilder();//문자열을 만들어 출력할 변수
int num = sc.nextInt();//입력한 숫자
//입력한 숫자가 -1일 경우 반복 종료
if(num == -1){
break;
}
//-1로 배열을 만들 수 없음으로 break 문 뒤에 만듬
int[] aliquot = new int[num];//약수 확인에 필요한 배열
int add = 0;//약수를 더한 값
boolean flag = false;//첫 약수는 +을 넣지 않음
//1~수까지 모두 나눠서 약수 찾기
for (int i = 1; i < num; i++) {
if (num % i == 0) {
add += i;//약수 더함
aliquot[i] = 1;//약수 INDEX 1로 변경
}
}
//약수의 총합과 수가 같을 때
if (num == add) {
stb.append(num + " = ");//해당수 =
//배열을 돌려가면서 문자열을 입력함
for (int i = 0; i < aliquot.length; i++) {
if (aliquot[i] == 1 && flag == false) { //첫 약수일 때
flag = true;
stb.append(i);// 해당수 = 약수
} else if (aliquot[i] == 1 && flag == true) { // 두 번째 약수 일 때
stb.append(" + " + i);// 해당수 = 약수 + 약수 ..
}
}
} else { // 약수의 총합과 수가 다를 때
stb.append(num + " is NOT perfect.");
}
//출력
System.out.println(stb);
}
}
}
'알고리즘 > 백준 문제 및 정답' 카테고리의 다른 글
문제 번호 1085번 : 직사각형에서 탈출 - JAVA [자바] (0) | 2023.04.13 |
---|---|
문제 번호 27323번 : 직사각형 - JAVA [자바] (0) | 2023.04.11 |
문제 번호 2501번 : 약수 구하기 - JAVA [자바] (0) | 2023.04.09 |
문제 번호 5086번 : 배수와 약수 - JAVA [자바] (0) | 2023.04.09 |
문제 번호 27433번 : 칸토어 집합 - JAVA [자바](파일의 끝에서 입력을 멈춘다.) (0) | 2023.03.31 |