본문 바로가기
백준

[백준] 1037번 : 약수 – JAVA [자바]

by Hongwoo 2022. 4. 18.
반응형

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

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1037번 약수는 실버 5 난이도의 수학 문제이다. 이 문제에서는 약수의 개수 n이 주어지고 그다음 줄에는 n개만큼의 약수들이 주어진다. 이 문제에서는 다음과 같이 주어졌다 : A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다.

 

즉, N을 A만큼 나누면 나머지는 0이라는 것이다. 이 말은 N ÷ A = B라는 것이다. 그래서 주어진 약수들 중에서 가장 작은 약수와 가장 큰 약수를 곱하면 N이 나온다.

 

문제에서 주어진 예제들을 한번 보겠다. 가장 작은 약수를 min, 가장 큰 약수를 max라고 하겠다.

 

EX 1) 4, 2

첫 번째 예제에서 min은 2이고 max는 4이다. 따라서 2 × 4 = 8이다.

 

EX 2) 2

두 번째 예제에서 min은 2이고 max는 2이다. 따라서 2 × 2 = 4이다.

 

EX 3) 3, 4, 2, 12, 6, 8

세 번째 예제에서 min은 2이고 max는 12이다. 따라서 2 × 12 = 24이다.

 

EX 4) 14, 26456, 2, 28, 13228, 3307, 7, 23149, 8, 6614, 46298, 56, 4, 92596

네 번째 예제에서 min은 2이고 max는 92596이다. 따라서 2 × 92596 = 185192이다.

 


  • 코드 1 (MIN, MAX 이용)

 

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
            min = Math.min(min, arr[i]);
            max = Math.max(max, arr[i]);
        }
        System.out.print(min * max);
    }
}

 


  • 코드 2 (Arrays.sort 이용)

 

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);
        System.out.print(arr[0] * arr[n-1]);
    }
}

 


  • 후기

약수가 뭔지만 알면 풀 수 있는 되게 간단한 문제였다.

 

반응형

댓글