본문 바로가기
BOJ/[BOJ] Python

백준 2581번 풀이

by Lv. 35 라이츄 2022. 8. 19.

문제

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

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

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이 나오게 했다.

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 1929번 풀이  (0) 2022.08.19
백준 11653번 풀이  (0) 2022.08.19
백준 1978번 풀이  (0) 2022.08.18
백준 1011번 풀이  (0) 2022.08.18
백준 10757번 풀이  (0) 2022.08.18

최근댓글

최근글

skin by © 2024 ttutta