[BOJ] 약수 - 1037 (B1)
[BOJ] 약수 - 1037 (B1)
시간 제한 | 메모리 제한 |
---|---|
2 초 | 512 MB |
문제
양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
출력
첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.sㄴ
풀이
주어지는 A가 약수이므로 이들을 모두를 약수로 가지는 수 N를 구하기 위해서 굳이 모든 A를 확인하며 계산할 필요는 없다. 곱했을 때 N이 되도록 하는 약수들의 쌍을 찾아내기만 하면 되기 때문이다.
내가 생각했을 때 가장 쉬운 방법은 주어진 약수들 중 최소값과 최대값을 찾아 곱하는 것이다. 모든 약수들 중에서 최소와 최대로 만든 쌍은 곱했을 때 항상 이 약수들을 포함하는 수가 된다.
코드
1
2
3
4
5
6
7
n = int(input())
div = list(map(int, input().split()))
min, max = float('inf'), float('-inf')
for d in div:
if min > d : min = d
if max < d : max = d
print(min * max)
This post is licensed under CC BY 4.0 by the author.