[백준] 9506

당당·2023년 4월 20일
0

백준

목록 보기
11/179

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

📔문제

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.


📝입력

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)

입력의 마지막엔 -1이 주어진다.


📺출력

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

이때, 약수들은 오름차순으로 나열해야 한다.

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.


📝예제 입력 1

6
12
28
-1

📺예제 출력 1

6 = 1 + 2 + 3
12 is NOT perfect.
28 = 1 + 2 + 4 + 7 + 14

🔍출처

ICPC > Regionals > North America > Pacific Northwest Regional > 2013 Pacific Northwest Region Programming Contest F번

-문제의 오타를 찾은 사람: jh05013, pkcchoi3
-데이터를 추가한 사람: seong954t
-문제를 번역한 사람: yukariko


🧮알고리즘 분류

  • 수학
  • 구현
  • 정수론

📃소스 코드


import java.util.Arrays;
import java.util.Scanner;

public class Code9506 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner=new Scanner(System.in);
		
		int num=0;
		boolean isRoop=true;
		
		int[] divisor=new int[10000];
		int sum=0;
		
		while(isRoop) {
			num=scanner.nextInt();
			sum=0;
			if(num==-1) {
				isRoop=false;
				break;
			}
			else {
				int i=1;
				int count=0;
				
				while(i<num) { //find divisor (except num)
					if(num%i==0) {
						divisor[count]=i;
						count++;
					}
					i++;
				}
				
				int[] array=new int[count];
				
				for(int j=0;j<count;j++) {
					array[j]=divisor[j];
					sum=sum+divisor[j];
				}
				
				Arrays.sort(array);
				if(sum==num) {
					System.out.print(num+" = ");
					for(int k=0;k<count;k++) {
						System.out.print(array[k]);
						if(k!=count-1) {
							System.out.print(" + ");
						}
					}
					System.out.println("");
				}
				else {
					System.out.println(num+" is NOT perfect.");
				}
				
			}
			
			
		}
		
		
	}

}

📰출력 결과


📂고찰

https://velog.io/@dangdang/백준-2501

이전에 푼 2501 이 소스코드를 그대로 썼다!
바뀐 점이라면 while(i<num) 으로 본인을 제외한 수를 약수로 저장하였다.

그리고 한번 틀렸습니다가 나왔는데,
마지막에 한 줄 안띄워줘서 그런것이었다...

그리고, sum=0 으로 while(isRoop)안에서 반복될때마다 초기화해줬다.
안그러니까 sum+=으로 해서 값이 계속계속 더해졌다..

0개의 댓글