데굴데굴

[파이썬] 2581번: 소수 본문

algorithm/백준

[파이썬] 2581번: 소수

aemaaeng 2022. 4. 7. 23:15

 

 

2581번: 소수

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

www.acmicpc.net

 

'단계별로 풀어보기'에서 이 바로 전 문제였던 1978번 문제에서 조금 더 발전한 문제이다. 여기서는 자연수 m과 n을 입력받은 후 m과 n 사이에 존재하는 소수의 합과 최소값을 출력해야 한다. 그래서 저번 문제에서 썼던 코드를 가져와 살짝 수정만 해줬다. 

 

n = int(input())

numbers = map(int, input().split())
cnt = 0

for num in numbers:
    error = 0  # for문을 돌 때마다 error가 초기화되도록.
    if num > 1:  # 1은 소수가 아니니까 제외
        for i in range(2, num):
            if num % i == 0:
                error += 1
        if error == 0:
            cnt += 1

print(cnt)

이건 1978번 문제에서 썼던 코드 (구글링한 코드임...)

 

m = int(input())
n = int(input())

cnt = []

for num in range(m, n + 1):
    error = 0 
    if num > 1:
        for i in range(2, num):
            if num % i == 0:
                error += 1
        if error == 0:
            cnt.append(num)

if len(cnt) == 0:
    print(-1)
else:
    print(sum(cnt), min(cnt), sep='\n')

이건 이번 문제 코드. 시스템에서 m과 n을 엔터로 구분해 입력받기 때문에 input().split()을 쓰지 않고 그냥 명령문을 두 개 입력했는데 하나로 합치는 방법이 있는지는 아직 모르겠다. cnt를 리스트로 바꾸고 범위를 m부터 n까지로 정한 다음 소수에 해당하면 cnt 리스트에 하나씩 추가하는 방식으로 짰다. 그리고 마지막 if문에서 리스트의 길이가 0, 즉 소수가 하나도 없으면 -1을 출력하고 그렇지 않으면 소수들의 합과 최소값을 한 줄씩 출력하도록 작성했다. 

'algorithm > 백준' 카테고리의 다른 글

[파이썬] 4948번: 베르트랑 공준  (0) 2022.06.12
[파이썬] 1929번: 소수 구하기  (0) 2022.04.20
[파이썬] 1978번: 소수 찾기  (0) 2022.04.04
[파이썬] 10250번: ACM 호텔  (0) 2022.03.23
[파이썬] 1193번: 분수찾기  (0) 2022.03.20
Comments