백준 2581번 풀이

문제

M부터 N까지 소수의 합과 최솟값을 구하시오

풀이

import sys
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
a = list(range(M,N+1))
print(M,N,a)

사실 이렇게 배열 만들어서 하려고 했더니 일부 합성수가 안 지워졌다.

import sys
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
P = []
def isprime(a):
    if a < 2: 
        return False
    for i in range(2,a):
        if a % i == 0:
            return False
    else: 
        return True
for i in range(M,N+1):
    if isprime(i):
        P.append(i)
print(sum(P))
print(min(P))

그래서 이게 최선임.. 아니 일단 내지 말아봐… 일단 답이 없을 때 -1을 출력하려면, 어떻게 나오는지를 봐야 한다.

[]
0
Traceback (most recent call last):
  File "/home/koreanraichu/Untitled-1.py", line 18, in <module>
    print(min(P))
ValueError: min() arg is an empty sequence

답이 없을 때는 리스트가 없고, 합도 없을뿐더러 빈 리스트라서 최솟값 찾아달라고 하면 오류난다.

import sys
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
P = []
def isprime(a):
    if a < 2: 
        return False
    for i in range(2,a):
        if a % i == 0:
            return False
    else: 
        return True
for i in range(M,N+1):
    if isprime(i):
        P.append(i)
if len(P) <= 0:
    print(-1)
else: 
    print(sum(P))
    print(min(P))

그래서 거기에 대한 처리를 추가해야 한다. 빈 리스트는 길이가 0이니까, 리스트 길이가 0이면 -1이 나오게 했다.