자료구조 및 알고리즘/백준

[python] 2581. 소수

viamemine 2023. 1. 12. 17:20
728x90
반응형
  • 문제 



 

  • 잘못된 풀이
M = int(input()) # M 이상 N 이하의 자연수 중 소수인 것을 모두 골라 소수의 합과 최솟값을 찾음
N = int(input())

prime_list = []
for i in range(M, N+1): # M부터 N까지의 60, 100
    check = 0
    for j in range(2, i):
        if i%j == 0: # 소수가 아닐 때, check 값을 1로 만듦
            check = 1
            break
    if check == 0: # check
        prime_list.append(i)
if len(prime_list) == 0:
    print("-1")
else:
    print(sum(prime_list))
    print(min(prime_list))

 

해당 문제도 앞 게시글처럼 소수를 판단하는 문제이다.

이전 문제와 다른점은, 해당 문제는 일정 범위가 주어지고 소수를 찾는 문제이다.

 

일정 범위를 위한 이중 for문으로 문제를 해결하고자 했으며,

이전 문제의 알고리즘과 동일하게 check의 기본값을 0으로 하고

소수가 아닐 때, check 값을 1으로 하여 소수를 판단하였다.

 

알고리즘적으로는 문제가 없지만, 해당 코드는 1에 대한 예외처리가 없다.

 

  • 올바른 풀이
M = int(input()) # M 이상 N 이하의 자연수 중 소수인 것을 모두 골라 소수의 합과 최솟값을 찾음
N = int(input())

prime_list = []
for i in range(M, N+1): # M부터 N까지의 60, 100
    check = 0
    if i == 1:
        continue
    for j in range(2, i):
        if i%j == 0: # 소수가 아닐 때, check 값을 1로 만듦
            check = 1
            break
    if check == 0: # check
        prime_list.append(i)
if len(prime_list) == 0:
    print("-1")
else:
    print(sum(prime_list))
    print(min(prime_list))

 

따라서 해당 코드처럼 1에 대한 예외처리를 해주기 위해 if문에 continue를 추가하였다.

그리고 해당 숫자가 소수일 경우 prime_list라는 list에 append(추가)하여 sum()과 min()을 통해 답을 도출하였다.

 

728x90