[백준 | 9506번] 약수들의 합

728x90

 

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

 

📝 나의풀이

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        
		Scanner scanner = new Scanner(System.in);
		
		
		while(true) {
			int N = scanner.nextInt();
			
			if(N == -1) {
				break;
			}
			
			ArrayList<Integer> NArray = new ArrayList<Integer>(); //약수를 담을 배열
			int NSum =0; // 약수의 합
			

			for(int i=1; i<N; i++) {
				if(N%i==0) {
					NArray.add(i);
					NSum+=i;
				}
			} //약수일 때 숫자 담기
			
			
			if(NSum!=N) {
				System.out.println(N+" is NOT perfect.");
				continue;
			} else {
			
				System.out.print(N +" = ");
				
				for(int i=0; i<NArray.size(); i++) {
					
					if(NArray.get(i)==1) {
						System.out.print(NArray.get(i));
					} else {
					System.out.print(" + "+NArray.get(i));
					}
				}
				System.out.println();
			}
		}
	}
}
  • 제일 마지막에 줄바꿈을 하지 않아서 계속 오류로 뜨는 바람에 애를 많이 먹었다.
  • while(true) 를 통해 무한반복, -1이 입력되면 break; 되도록 해 준다.
  • 약수일 때 NArray에 담아주고 어차피 순서대로 들어가기 때문에 오름차순 정렬은 따로 하지 않았다.
  • 완전수라면 약수들의 합을 나타내어 출력
    ex) 6 = 1 + 2 + 3
    완전수가 아니라면 n is NOT perfect 출력이기 때문에
    약수의 합이 N과 다르면 (NSum != N ) n is NOT perfect 출력
  • 그리고 마지막에 꼭 줄바꿈..!!
728x90

'코딩테스트 > [JAVA] 백준' 카테고리의 다른 글

[백준 | 1978번] 소수 찾기  (0) 2023.08.13
[백준 | 5622번] 다이얼  (0) 2023.08.13
[백준 | 2444번] 별찍기-7  (0) 2023.08.10
[백준 | 10813번] 공바꾸기  (0) 2023.08.10
[백준 | 27323번] 직사각형  (0) 2023.08.10