코딩테스트연습(파이썬)
소수 찾기 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제
LearnerToRunner
2022. 12. 7. 21:03
문제
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.)
제출답안
def solution(n):
def is_primeN(n):
"""
소수 탐지 함수
@param n: int
return 0 or 1
"""
output = 1 # 기본값(True)
for num in range(2, int(n**0.5)+1):
# 1과 주어준 수의 제곱근 사이에 약수가 하나라도 있으면 소수가 아니다.
if not n % num:
output = 0
break
return output
# 2 이상의 홀수만 대상으로 체크 (2 이상의 짝수는 소수가 아니다)
ls_odd = [num for num in range(2, n+1) if num%2]
# 솟수 점검범위: 2, 그 이상의 홀수
answer = 1 + sum([1 for num in ls_odd if is_primeN(num)])
return answer
다른사람 풀이
에라토스테네스의 체라는 소수를 찾는 방법이 있었다
그리고 성능이 상상을 초월했다.
해당 코드는 아래와 같다.
def solution(n):
num=set(range(2,n+1))
for i in range(2,n+1):
if i in num:
num-=set(range(2*i,n+1,i))
return len(num)
다른 사람의 풀이를 개선
위 코드에서 숫자를 확인하는 경우의 수를 줄이는 것으로 마무리지었다.
추후에, 더 개선시켜보는 것으로
아래가 최종 코드와 그 결과물이다
def solution(n):
num= set(range(3,n+1, 2))
for odd in range(3,n+1, 2):
if odd in num:
num-=set(range(2*odd,n+1,odd))
answer = len(num)+1
return answer
문제 바로가기
728x90