문제 설명
1부터 입력받은 숫자 n 사아에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
첫 코드
def solution(n):
temp = []
for sosu in range(1, n+1):
g = []
for i in range(1, sosu+1):
if sosu % i == 0:
g.append(1)
if sum(g) == 2:
temp.append(1)
answer = sum(temp)
return answer
정답은 잘 도출해냈지만, 시간 복잡도 측면에서 굉장히 좋지 못한 알고리즘이었다.
에라토스테네스의 체를 사용하여 효율성 높은 알고리즘으로 다시 짜보았다.
개선된 코드
import math
def solution(n):
array = [True for i in range(n+1)]
for i in range(2, int(math.sqrt(n))+1):
if array[i] == True:
j = 2
while i * j <=n:
array[i * j] = False
j += 1
return len([i for i in range(2, n+1) if array[i] == True])
핵심 아이디어
여기서 math.sqrt(n)은 n의 가운데 약수를 의미한다. 가운데 약수를 넘지 않는 한도에서 i를 증가시킨다.
'알고리즘 > 프래그래머스 lv.1' 카테고리의 다른 글
시저 암호 (0) | 2022.10.24 |
---|---|
예산 (0) | 2022.10.21 |
2016년 (0) | 2022.10.19 |
완주하지 못한 선수 (0) | 2022.10.19 |
나누어 떨어지는 숫자 배열 (0) | 2022.10.19 |