Algorithm/정렬(Sort)
[백준 1037번] 약수 (Java 풀이)
agility
2022. 5. 29. 11:16
백준알고리즘 1037번 : 약수 (Solved.ac 난이도 Silver5)
https://www.acmicpc.net/problem/1037
1037번: 약수
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되
www.acmicpc.net
문제를 꼼꼼히 읽어야한다는 것을 다시한번 상기하게되었다.
얼핏 보고 나열된 숫자들의 최소공배수를 구하는 문제인 줄 알았는데,
나열된 약수들을 갖고 있는 숫자를 맞추는 문제였다.
양수 A가 정답이라면, A와 1은 약수로 치지않는다.
약수들의 목록을 오름차순으로 정렬하고, 최소 값과 최댓 값의 곱을 구해주면 간단하게 해당 숫자를 맞출 수 있다.
처음에는 약수의 개수가 짝수이면 최소값과 최대값의 곱으로 출력하고,
약수의 개수가 홀수이면 가운데 index 값을 제곱하는 식으로 출력하였다.
그런데 생각해보니 홀수도 index 최소 최대값을 곱하면 되어서 굳이 구분할 필요가 없어 소스를 수정했다.
풀이 과정
1. 약수 목록을 배열로 받은 후 오름차순으로 정렬한다.
2. 약수 목록 중 index가 0인것과 length-1인 값을 받아서 곱하여 출력한다.
소스 ▽
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {//[Silver5] No1037 : 약수
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
long[] arr = new long[num];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < num; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
System.out.println(arr[0] * arr[arr.length - 1]);
}
}