본문 바로가기
  • 개발 삽질 블로그
프로그래밍/백준 문제풀이

백준 1037: 약수

by 갹둥 2022. 8. 12.

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

 

1037번: 약수

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

www.acmicpc.net

약수들 중 가장 큰 것과 가장 작은 것을 곱하면 되는 문제이다.

진짜 약수들이기 때문에 최소공배수로 구하면 안된다. 진짜 약수는 약수들 중 1과 N을 제외한 것이다. 

예를 들면 

6
3 4 2 12 6 8

에서 답은 24인데 24의 약수는 1 2 3 4 6 8 12 24이다. 

 

좌 우 대칭으로 약수를 하나씩 곱하면 최소공배수를 구할 수 있다. 따라서 진짜 약수 중 가장 작은 수와 가장 큰 수를 곱하면 된다. 수들을 입력 받아 배열에 넣고 정렬한 다음 0번 인덱스와 가장 마지막 인덱스의 수를 곱하면 답을 구할 수 있다.

import java.util.*;

public class Main {
	public static void main(String[] args){
			int n;
			long mul;
			Scanner sc = new Scanner(System.in);
			
			n=sc.nextInt();
			int[] arr = new int[n];
			for(int i=0; i<n; i++) {
				arr[i] = sc.nextInt();
			}
			Arrays.sort(arr);
			System.out.println(arr[0]*arr[n-1]);
	  }
}