공부하기/백준

[Python] 백준 풀기 1037 - 약수

XEV 2022. 10. 20. 22:05

파이썬 백준 1037번

브론즈1

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

 

1037번: 약수

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

www.acmicpc.net

 

 

 

 

문제 보기

분류: 정수론 및 조합론, 수학, 정수론

 

 

 

문제 풀기

문제에서 모든 약수를 제시해 주기 때문에 이를 리스트로 저장하고 오름차순으로 정리하여 맨 왼쪽 그리고 맨 오른쪽 수를 곱하면 되겠다고 생각하였다. 그런데 내가 이 부분에서 간과한 것이 있었으니 그것은 하나의 수가 제시되었을 때. 예제 입력에도 하나의 수가 있었지만 이 부분은 깜빡 잊고 코드를 작성해 나갔다. 여튼 맨 왼쪽은 factors_ls[0] 이고 맨 오른쪽은 factors_ls[-1] 이라 하나의 숫자가 제시되어도 적용되는 코드이긴 했다.

 

그리고 또 한 가지, 제출을 하려고 클릭을 하는 순간 굳이 리스트를 오름차순 정리할 필요 없이 max, min 으로 그 값을 찾아도 되었을 텐데 하는 생각이 지나갔다.

(리스트를 오름차순 돌리면 시간 복잡도 부분에서 많이 손해일 것이다.)

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

def fnFindFromFactors(factors_ls):
    factors_ls.sort()
    # print(factors_ls)           # test print
    
    result = factors_ls[0] * factors_ls[-1]
    
    return result


if __name__ == "__main__":
    N = int(inputdata().strip())
    factors_ls = list(map(int, inputdata().split()))
    # print(factors_ls)           # test print
    
    result = fnFindFromFactors(factors_ls)
    
    print(result)