문제 정보
1037번: 약수
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되
www.acmicpc.net
핵심
간단한 수학적 지식이 있다면 풀 수 있는 문제이다
예를 들어 8의 약수를 생각해 보면,
1, 2, 4, 8
다음과 같은데, 1과 8이 한 쌍을 이루고 2와 4가 한 쌍을 이룬다 (두 수를 곱하면 8이 되는 것이다)
여기서 1과 8은 진짜 약수가 아니므로 해당 문제에서 주어지지 않고 2와 4가 주어진다
이 두 수를 곱해주면 되는데 이 경우 주어진 진짜 약수들 중 가장 작은 수와 가장 큰 수를 곱하면 우리는 N을 알 수 있는 것이다
다만 9의 진짜 약수는 1, 3, 9 중 3밖에 없는데
이 경우에도 3은 가장 작은 수이면서 가장 큰 수이므로 두 수를 곱하면(3*3) N
인 9를 도출해낼 수 있다
풀이
from sys import stdin
_ = stdin.readline()
A = list(map(int, stdin.readline().split()))
A.sort()
print(A[0] * A[len(A)-1])
A는 정렬된 상태이기 때문에 A[0]
(최소값) 곱하기 A[len(A)-1)
(최대값) 을 하면 N
을 구할 수 있다
참고
GitHub - dduneon/CodingTestPy
Contribute to dduneon/CodingTestPy development by creating an account on GitHub.
github.com
댓글