2581번 : 소수 문제
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라
이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중
소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로,
이들 소수의 합은 620이고, 최솟값은 61이 된다.
https://www.acmicpc.net/problem/2581
풀이 코드
m = int(input())
n = int(input())
sosu = []
for i in range(m, n+1):
for j in range(2, i+1):
if j == i:
sosu.append(i)
if i % j == 0:
break
if not sosu:
print(-1)
else:
print(sum(sosu))
print(min(sosu))
m = int(input()) / n = int(input())
- 입력받은 두 정수를, 변수 m, n 에 저장
- 두 정수가 서로 다른 줄로 입력되므로, input() 을 통해 한 줄의 문자열씩 입력받음
- 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용
sosu = []
- m 이상 n 이하의 자연 수 중, 소수 인 것을 저장할 리스트 sosu 선언
for i in range(m, n+1)
- m 이상 n 이하의 자연수 중 소수를 찾아야 하므로, for 반복문 사용
- range() 를 사용하여 m 부터 n 까지 for 문을 반복
- i의 값으로 m 부터 n 까지 순차적으로 들어감
for j in range(2, i+1):
- range() 를 사용하여 2부터 i 까지 for문을 반복
- j 값으로 2 부터 i까지 들어감
- 소수는 1보다 큰 자연수 중에 있으므로, 2부터 탐색
if j == i: / sosu.append(i)
- i 값이 j 에 도달하는 경우, 1을 제외하고 나누어 떨어지는 수가 없다는 뜻 (소수)
- 변수명.append() 메서드를 사용하여, 소수를 sosu 리스트에 삽입
if i % j == 0: / break
- i 를 j 로 나누었을 때, 나누어 떨어지는 경우
- 소수에 해당 하지 않으므로 for 문을 빠져나감
if not sosu: print(-1)
- m 이상 n 이하의 자연 수 중 소수가 없는 경우
- -1을 출력
else:
- m 이상 n 이하의 자연 수 중 소수가 있는 경우
print(sum(sosu))
- sum() 함수는 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환
- sosu 리스트에 있는 소수의 합을 구하고 출력
print(min(sosu))
- min() 함수는 파라미터가 2개 이상 들어왔을 때, 가장 작은 값을 반환
- sosu 리스트에 있는 소수 중, 가장 작은 값을 출력
나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
'백준 알고리즘 문제 풀이 [Python]' 카테고리의 다른 글
[백준/Python] 1929번 소수 구하기 (기본수학2) (0) | 2023.02.25 |
---|---|
[백준/Python] 11653번 소인수분해 (기본수학2) (0) | 2023.02.25 |
[백준/Python] 1978번 소수 찾기 (기본수학2) (0) | 2023.02.25 |
[백준/Python] 10757번 큰 수 A+B (기본수학1) (0) | 2023.02.25 |
[백준/Python] 2839번 설탕 배달 (기본수학1) (0) | 2023.02.25 |