본문 바로가기
코딩테스트/백준 알고리즘

백준 알고리즘 | 1978 : 소수 찾기 (Python / 파이썬)

by 함께 공부해요 2020. 11. 3.


소수 찾기 성공분류

시간 제한

메모리 제한

제출

정답

맞은 사람

정답 비율

2 초

128 MB

55078

25860

21348

48.403%

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

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net


문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

알고리즘 분류

수학

정수론

소수 판정

에라토스테네스의 체


백준 알고리즘 # 1978번 : 소수 찾기

n = int(input())
ls = list(map(int, input().split()))
result = 0

for i in ls:
    cnt = 0
    if i == 1:
        continue
    
    for j in range(2, i + 1):
        if i % j == 0:
            cnt += 1
    
    if cnt == 1:
        result += 1

print(result)

풀이

먼저 n 변수로 몇 개의 정수를 입력받을지 설정하고, ls 변수로 입력받는 정수를 list로 각각 정수로 저장해요.

다음으로 result 변수를 설정해서 0으로 초기화 시켜놓은 뒤

for문으로 ls 리스트 안에 들어있는 정수들을 i로 하나씩 반복해주기로 해요.

key point 1

for문 안에서 소수를 찾기위한 cnt 변수를 0으로 for문이 반복될 때마다 초기화 시켜주고

key point 2

if문으로 만약 i가 1이라면, 즉 1은 소수가 아니기 때문에

if문으로 1일 경우에는 continue, 1은 산정하지 않고 for 반복문을 진행시켜요.

이중 for문으로 for문 안에서 또 하나의 for문으로 1을 제외한 2부터 시작해야되니

range(2, i + 1)로 해서 2부터 i + 1 전의 값까지 j로 하나씩 반복해줘요.

key point 3

여기서 i % j == 0, 즉 하나의 예시로 i가 9일 경우에 j는 2~9의 값을 갖게되고

그렇다면 9 % 3 == 0, 9 % 9 ==0 두 가지의 경우를 갖기 때문에

if문으로 설정해놓은 cnt += 1이 두 번 해당되서 cnt는 2가 되요.

그렇다면 마지막 if문인 cnt == 1일 때 result += 1 하라는 것에 해당되지 않으니 result는 증가하지 않아요.

이것으로 9는 소수가 아니라는 코드가 완성되고 소수를 판별할 수 있어요!

정리

1) cnt가 매번 0으로 초기화 되고

2) 1은 소수가 아니므로 continue로 넘어가고

3) 2부터 i + 1 까지 i % j == 0의 값에 따라서 cnt를 증가하고 (소수가 아닌 정수는 cnt가 2 이상임)

4) cnt가 1일 때만 result에 1을 증가시키므로 소수일 때만 result가 올라가게 된다! 풀이 끄-읏👏

세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏

 

wook2124/Algorithm-Test

Practice algorithm. Contribute to wook2124/Algorithm-Test development by creating an account on GitHub.

github.com

최종 소스코드

댓글