728x90
<정답>
import math
def solution(n):
answer = 0
for i in range (2, n+1):
check_prime = True
for j in range(2, int(math.sqrt(i))+1):
if(i % j == 0):
check_prime = False
break
if(check_prime):
answer += 1
return answer
for j in range(2, i+1)
시간초과로 실패
-> 제곱근까지 돌리니까 문제 해결됨(시간복잡도 감소)
의문: 어차피 제곱근 넘어서 가기 전에 break로 끊기는데도 시간초과가 뜨는 이유가 뭘까?
-> 엄청 큰 소수를 돌릴 때 제곱근까지만 돌려도 되는데 구지 n까지 돌릴 이유가 없기 때문
<피드백 후>
import math
def solution(n):
answer = 0
for i in range (2, n+1):
prime = True
for j in range(2, int(math.sqrt(i))+1):
if i % j == 0 :
prime = False
break
if prime:
answer += 1
return answer
고친점
- if 문 뒤에 괄호 없어도 됨
- check_prime보다 prime인 경우 'if prime' 이 돼서 더 보기 좋음
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 기능개발 (python) (1) | 2024.01.02 |
---|---|
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 올바른 괄호 (python) (0) | 2024.01.02 |
[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 같은 숫자는 싫어 (python) (1) | 2023.12.31 |
[프로그래머스] 짝수와 홀수 (JAVA) (0) | 2023.02.07 |
[프로그래머스] 행렬의 덧셈 (JAVA) (0) | 2022.12.24 |