티스토리 뷰
접근법
우선 소수의 정의를 확실하게 이해할 필요가 있다!
위처럼 약수가 단 두 개, 자기 자신과 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 |
댓글