본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 1037번] 약수(JAVA)

by 테크케찰 2020. 8. 14.

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

 

1037번: 약수

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

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static StringBuilder sb=new StringBuilder();
	static int[] number;
	
	public static void main(String args[]) throws Exception {
		int num=Integer.parseInt(br.readLine());
		String s[]=br.readLine().split(" ");
		number=new int[num];
		for(int i=0;i<num;i++) {
			number[i]=Integer.parseInt(s[i]);
		}
		Arrays.sort(number);
		long result=number[0]*number[num-1];
		System.out.println(result);
	}
}

 

 어떤 수의 약수 중 대응하는 약수끼리 곱하면 그 수가 나옵니다.

예를 들어 18의 약수를 살펴봅시다.

18의 약수는 1, 2, 3, 6, 9, 18입니다. 

대응하는 약수끼리 곱하면 1*18, 2*9, 3*6이 되는데요, 이렇게 되면 18이 됩니다.

이 성질을 이용해서 문제를 풀었는데요, 두 번째 줄에서 약수를 입력받으면, 이 약수들을 number라는 정수 배열에 저장했습니다.

이후 이 배열을 오름차순으로 정렬해서 가장 작은 진짜 약수와 가장 큰 진짜 약수를 곱해줘서 원래 수가 어떤 수인지를 구했습니다.