Algorithm/JUNGOL

[정올] 2809 : 약수

Gyuri 2022. 1. 20. 18:47

문제

한 개의 정수를 입력받아 입력받은 정수의 약수를 모두 출력하는 프로그램을 작성하시오.

입력형식

정수 N이 주어진다. (2 ≤ N ≤ 21억)

출력형식

N의 약수를 작은 수부터 차례로 모두 출력한다.

입력 예

24

출력 예

1 2 3 4 6 8 12 24
 

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        int sq = (int)Math.sqrt(n); // n의 제곱근 저장
        int arr[] = new int[10000]; // n의 약수 저장위해
        int cnt = 0; 
        
        // n의 제곱근까지만 반복문 실행
        for(int i=1; i<=sq; i++) {
            if(n % i == 0) {
                arr[cnt++] = i; // 작은 수 저장 (작은수=큰수 인 경우)

                if(n/i != i) { // 작은 수 큰 수 다른 경우
                    arr[cnt++] = n/i; // 큰 수 저장
                }
            }
        }

		// 작은 순으로 약수 저장된 배열 정렬
        for(int i=0; i<cnt; i++) {
            for(int j=0; j<(cnt-1)-i; j++) {
                int temp = 0;
                if(arr[j] > arr[j+1]) {
                    temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        // 작은 순으로 약수 출력
        for(int i=0; i<cnt; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}