코딩테스트/프로그래머스
[프로그래머스] 소수찾기 python
최말짱
2022. 7. 29. 22:06
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
첫 번째 푼 solution
def solution(n):
cnt=0
for x in range(1,n+1):
if len([ x for i in range(1,x+1) if x%i==0 ])==2:
cnt+=1
return cnt
흐음... 시간초과가 뜨길래 나름 리스트 컴프리헨션으로 풀었는데 효과가 없었다... ㅠㅠ
https://coding-of-today.tistory.com/169
파이썬(Python) - 소수 찾기 알고리즘 구현하기(Prime Number)
코딩테스트를 공부하거나 준비하다보면 특정 숫자가 소수(Prime Number)인지 아닌지를 판단해야할 때가 있다. 소수는 1과 자기자신을 제외하면 자연수 중에서 어떤 숫자로도 나누어 떨어지지 않는
coding-of-today.tistory.com
위 블로그를 통해서 해결책을 알아낼 수 있었다.
자연수의 약수를 구할 때는 자기자신의 제곱근까지만 확인해보면 된다는 것이다.
굳이 모든 수를 나눠볼 필요가 없다.
[그래서 최종 작성한 코드]
def solution(n):
# 1 5 25
# ex 26
ans=0
for x in range(2,n+1):
cnt=0
for i in range(2,int(x**(1/2))+1):
# 소수가 아닐때
if x%i==0:
cnt+=1
break
if cnt==0:
ans+=1
return ans
- for x in range에서 어차피 1은 의미가 없으므로 2부터 range 설정해주기
- 소수 판별하기 위해 나눠줄 때 x의 제곱근 만큼만 for문 돌려주기 !!
- (중요) if x%i==0이 성립하면 소수가 아니므로 바로 break 해주기
그 결과
통과완료 ㅎㅎ