본문 바로가기
Learning-log/Algorithm 문풀

백준(파이썬, python) - 1978번 소수 찾기 (2022.11.07)

by why제곱 2022. 11. 7.

1) 문제

 

2) 풀이

import sys
T = int(sys.stdin.readline())
numbers = list(map(int,sys.stdin.readline().split()))
count = 0
for i in numbers:
    if i ==2:
        count+=1
    elif i == 1:
        count +=0
    else:
        test = 0
        for j in range(2,i):
            if i%j == 0:
                test += 1
        if test == 0:
            count += 1

print(count)

 

3) 문법 및 풀이과정

소수란, 1과 자기 자신을 제외한 다른 수로 나누어지지 않는 수를 의미한다. 

에라토스테네스의 체를 활용할 수도 있지만 이 문제의 경우 입력값의 범위가 100이하로 그렇게 크지 않고, 시간제한도 넉넉하기 때문에 그냥 2 부터 n-1까지 직접 나누어 소수를 찾는 방법을 이용했다.

 

(1) 테스트케이스(T)를 입력받는다.

(2) 입력된 숫자를 list로 만든다. 

(3) count = 0을 정의한다. (테스트 하는 수가 소수일 때마다 1씩 더해지도록 할 것이다.)

(4) i == 2인 경우와 1인 경우는 if문으로 따로 빼서 각각 count에 1이 더해지고 , pass되도록 한다.

(5) for문을 이용해 2부터 i-1까지의 정수로 i를 나누어 나머지가 0인 경우 test에 1이 더해지도록 한다.

(6) test에 1이라도 더해졌다면 그 수는 1과 자기자신이 아닌 다른 수로 나누어졌다는 의미이므로 test가 0일 때만 count에 1이 더해지도록 한다.

(7) count를 출력한다.

 

 

cf. (4)경우를 수정하여 if i>1 경우에 for j in range ~ 가 돌아가도록 해도 문제 없으며 이 방법이 더 간단한 것 같다.