좌충우돌 개발자의 길

백준 알고리즘 | 2581번 (소수) | 파이썬 본문

CODING TEST/백준

백준 알고리즘 | 2581번 (소수) | 파이썬

sustronaut 2021. 7. 14. 21:51

2581번 (소수)*

  • 자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
  • 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.
  • M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.
  • 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
n1 = int(input())
n2 = int(input())

not_sosu = 0
total = 0

sosu_list = []

for i in range(n1, n2+1):
    for j in range(2, i):
        if(i % j == 0):
            not_sosu += 1
            break
    if(not_sosu == 0):  # 소수라는 뜻
        sosu_list.append(i)
        total += 1
        if(i == 1):
            sosu_list.remove(i)
            total -= 1
    not_sosu = 0

if total == 0:
    print(-1)
else:
    print(sum(sosu_list))
    print(min(sosu_list))

새롭게 알게 된 것

  • 시간 초과가 자꾸 나와서 찾아본 결과 break를 써주면 소수가 아닌 것을 찾은 즉시 멈추기 때문에 시간 낭비를 막을 수 있다.
  • list에 있는 것들 합을 구할 때 내장된 sum() 함수를 쓰면 된다.