Java/백준알고리즘

[Java] 백준알고리즘 #1037 약수

Sehyeok20 2023. 10. 13. 19:14
반응형

백준알고리즘 #1037 약수

어떤 수 N에 대해 1과 자기 자신(N)을 제외한 약수들이 주어졌을 때, 어떤 수 N을 찾는 문제.

 

N에대한 약수는 제곱수가 아니라면 짝수개의 순서쌍으로 주어질 것이다.

때문에 이 약수들 중에서 가장 작은 수와, 가장 큰 수를 곱하면 자연스럽게 N을 구할 수 있다. 

(제곱수이며 약수가 1개인 경우는 가장 작은수, 가장 큰 수가 같아짐)

 

나는 2가지 방법으로 풀어보았다.

 

첫번째

약수를 배열로 받아 오름차순 정렬한 후, 첫번째 인덱스와 마지막 인덱스를 곱함.

// 해설참조 : sehyeok.tistory.com 

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        for (int i = 0; i < a.length; i++) {
            for (int j = i; j < a.length; j++) {
                if (a[i] > a[j]) {
                    int tmp = a[i];
                    a[i] = a[j];
                    a[j] = tmp;
                }
            }
        }
        System.out.println(a[0] * a[a.length - 1]);
        sc.close();
    }

}

 

두번째

최솟값을 저장할 min 변수와 최댓값을 저장할 max 변수를 두어 최댓값과 최솟값만을 저장한 후 이를 곱함

// 해설참조 : sehyeok.tistory.com 

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int min = 1000000;
        int max = 0;
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
            if (a[i] < min) {
                min = a[i];
            }
            if (a[i] > max) {
                max = a[i];
            }
        }
        System.out.println(max * min);
        sc.close();
    }

}

 

반응형