알고리즘/문제

[백준] 1037번 문제 - JAVA

Retro Rat 2026. 3. 5. 21:13

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

[문제]


[해설]

1. 문제 이해

어떤 자연수 N이 있을 때,

진짜 약수란 다음 조건을 만족하는 수를 의미한다.

  • N을 나눌 수 있는 수
  • 1과 N 자신은 제외

예를 들어

이라면 약수는

더보기
더보기

1, 2, 4, 8, 16

하지만 진짜 약수는 아래와 같다.

더보기
더보기

2, 4, 8

문제에서는 N의 진짜 약수들이 모두 주어졌을 때,
원래의 N을 구하는 것이 목표이다.

2. 핵심 아이디어

약수에는 중요한 특징이 있다.

어떤 수의 가장 작은 약수와 가장 큰 약수를 곱하면 원래 수가 된다.

예를 들어

약수

더보기
더보기

1 2 3 4 6 9 12 18 36

진짜 약수

더보기
더보기

2 3 4 6 9 12 18

이떄

더보기
더보기

가장 작은 약수 = 2

가장 큰 약수 = 18

따라서

더보기
더보기

2 × 18 = 36

진짜 약수들 중에서 최소값과 최대값을 곱하면 원래의 N이 된다.


[코드]

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int [] arr = new int[N];

        for (int i=0; i<N; i++) {
            arr[i] = sc.nextInt();
        }

        int min = arr[0];
        int max = arr[0];
        for (int i=0; i<N; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
            if (max < arr[i]) {
                max = arr[i];
            }
        }

        System.out.println(min * max);
        sc.close();
    }

 

 

'알고리즘 > 문제' 카테고리의 다른 글

[백준] 2566번 문제 - JAVA  (0) 2026.03.09
[백준] 10810번 문제 - JAVA  (0) 2026.03.09
[백준] 25494번 문제 - JAVA  (0) 2026.03.08
[백준] 1032번 문제 - JAVA  (0) 2026.03.05
[백준] 1009번 문제 - JAVA  (0) 2026.03.05