티스토리 뷰

프로그래밍/BOJ

백준 #1978: 소수 찾기

열무룩 2020. 1. 22. 14:35

 

접근법


우선 소수의 정의를 확실하게 이해할 필요가 있다!

 

초록창의 검색결과 (출처: 네이버 두산백과)

 

위처럼 약수가 단 두 개, 자기 자신과 1을 가지는 수를 소수라고 한다. 

 

문제는 주어진 입력 값들 중에서 소수가 몇 개인지 Counting 하는 것이므로 ,

 

필자는 주어진 입력 값까지 차례로 나누어 떨어지는 수가 있는지 판별하여 소수일 경우에는 1을 return하고

 

그렇지 않을 경우에는 0을 리턴하도록 함수를 생성해 보았다.

 

 

 

 

풀이


def Prime(n):
    if n <= 1:
        return 0
    elif n <= 3:
        return 1
    else :
        D = 0
        for i in range(2,n):
            if n % i == 0:
                D += 1
        
        if D == 0 :
            return 1
        else :
            return 0

case = int(input())
test = list(map(int,input().split(' ')))
cnt = 0
for i in test :
    cnt += Prime(i)
print(cnt)

 

1은 소수가 아니며 2와 3은 소수다. 그 부분은 따로 위쪽에 예외적으로 바로 return값을 주었고

그 외의 경우에서는 입력값까지 반복문을 돌리며 나누어 떨어지는 수가 있는지 판별할 수 있도록 했다.

근데 막상 짜고 나서 보니 비효율적인 부분이 너무나도 많다..

먼저, 중간에 나누어 떨어지는 수가 있으면 break를 걸어도 된다. 굳이 끝까지 돌릴 필요는 없어 보인다.

두 번째로 for문의 반복 범위가 입력값까지 돌 필요도 없다. 제곱근까지만 돌아도 되는 건데, 나란 놈...😨

이 부분은 여러분들이 수정해서 짜보는 것도 좋을듯하다!

 

 

@ 문제 출처 : 백준

'프로그래밍 > BOJ' 카테고리의 다른 글

백준 #1929: 소수 구하기  (0) 2020.01.22
백준 #1978: 소수  (0) 2020.01.22
백준 #1011: Fly me to the Alpha Centauri  (0) 2020.01.19
백준 #2775: 부녀회장이 될테야  (0) 2020.01.19
백준 #10250: AMC 호텔  (0) 2020.01.17
댓글
링크
최근에 올라온 글
Total
Today
Yesterday