2022년 11월 6일에 작성됨
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
문제 분석
소수는 1과 자기 자신만을 약수로 가지는 수이다.
즉, n을 2부터 n-1까지 수로 나눴을 때 나누어 떨어지는 수가 없다면 n은 소수가 되는 것을 이용한다.
소스 코드 (⭕)
m = int(input())
n = int(input())
sosu_list = []
for i in range(m, n+1): # m부터 n까지 반복
num = 0
for j in range(2, i): # 2부터 i - 1까지 반복
if i % j == 0: # i % j가 0이라면
num += 1 # num에 +1 해줌
break
if num == 0: # num이 0이라면
sosu_list.append(i) # 소수 리스트에 i 추가함
if 1 in sosu_list: # 소수 리스트에 1이 있으면
sosu_list.remove(1) # 1을 제거 해줌
if len(sosu_list) == 0: # 소수 리스트에 아무것도 없으면
print(-1) # -1을 출력
else:
print(sum(sosu_list))
print(sosu_list[0])
코드 분석
1. 범위 m과 n을 입력하고 소수를 담을 빈 리스트를 만든다.
2. i를 m부터 n까지 반복해주는데, i가 소수인지 알기 위해서 j를 2부터 i-1까지 반복 해준다.
3. 만약, i%j가 0이라면 i는 소수가 아니므로, num에 +1을 해주고 반복문을 빠져나온다.
4. num이 그대로 0이라면 i는 소수이므로, 소수 리스트에 넣어준다.
5. 소수 리스트에 1이 있으면 1을 제거해주고, 리스트가 비었으면 -1을 출력해준다.
6. 첫째 줄에 소수 리스트의 합을 출력하고, 둘째 줄에 소수 리스트의 최솟값을 출력해준다.
end
num이 1인지 0인지에 따라 소수인지 아닌지 판단할 수 있는 아이디어가 되게 좋은 것 같다!
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_5622 : 다이얼 (2) | 2023.10.30 |
---|---|
[Python]백준_2628 : 종이자르기 (2) | 2023.10.30 |
[Python]백준_1789 : 수들의 합 (2) | 2023.10.29 |
[Python]백준_1427 : 소트인사이드 (0) | 2023.10.29 |
[Python]백준_1193 : 분수찾기 (2) | 2023.10.27 |