백준 1037번 문제풀이

박세은·2023년 8월 1일

Algorithm

목록 보기
4/11

어제 한 번 풀어봤다고 오늘은 문제 이해가 좀 쉬웠던 것 같다.
어떤 수 N의 약수의 개수와 약수를 주고, 프로그램이 N을 구하도록 하면 된다. 문제에서 약수의 개수를 언급한 탓에 처음엔 길을 잃을 뻔 했다.

이 문제는 약수의 특징을 생각해보면 쉽게 풀 수 있는 문제다. 약수는 1과 자기자신을 제외한, 나누어 떨어지는 수들의 모음이다. 이 수들을 오름차순으로 정렬했을 때, 첫 번째로 오는 수와 마지막에 오는 수들을 서로 곱하면 원래의 숫자 N이 된다.

따라서 입력된 약수들을 리스트에 정리한 다음 리스트의 첫 번째 수와 마지막 수를 곱하면 N이 나온다.

count = int(input())
divisor = list(map(int, input().split()))

if not(count > 50 or count != len(divisor)):
    divisor.sort()
    print(divisor[0]*divisor[-1])

아! 약수들을 입력받을 땐 엔터가 아니라 한 줄로 입력받으니 그 점도 생각해서 map으로 입력받은 다음, list로 형변환을 해줬다.

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

0개의 댓글