알고리즘/Python

백준 알고리즘 1037번: 약수 (Python)

두넌 2023. 6. 18.

문제 정보


 

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

댓글