https://programmers.co.kr/learn/courses/30/lessons/12921
코딩테스트 연습 - 소수 찾기
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상
programmers.co.kr
풀이 과정
일정 범위에 있는 모든 소수를 찾아야 하는 문제이다. 1부터 n까지의 수에 대해 모두 소수 판정을 하면서 개수를 세면 답이야 구해지겠지만 시간복잡도가 O(NrootN)인 방법이 되어 효율성 테스트를 통과할 수가 없다.
일정 범위에 있는 모든 소수를 찾아야 할 때는 에라토스테네스의 체를 사용하는게 효과적이다. 에라토스테네스의 체가 무엇인지 모르면 아래 위키백과를 참조하면 좋다.
에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전
수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서
ko.wikipedia.org
에라토스테네스의 체의 시간복잡도는 O(NloglogN)으로 더 효율적이다 N이 100만이라 할때 일일이 소수 판정을 하면 연산 횟수가 약 10억번 언저리까지 나올 수 있지만 에라토스테네스의 체로는 2천만번 언저리의 연산으로 해결이 가능하다.
소스 코드
def solution(n):
answer = 0
check = [False for _ in range(1000001)]
prime = []
for i in range(2, 1000001):
if not check[i]:
prime.append(i)
for j in range(2*i, 1000001, i):
check[j] = True
for prime_number in prime:
if prime_number > n:
break
else:
answer += 1
return answer
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 시저 암호 [파이썬] (0) | 2022.06.22 |
---|---|
프로그래머스 - 전화번호 목록 [파이썬] (0) | 2022.06.18 |
프로그래머스 - 서울에서 김서방 찾기 [파이썬] (0) | 2022.06.17 |
프로그래머스 - 문자열 다루기 기본 [파이썬] (0) | 2022.06.17 |
프로그래머스 - 문자열 내림차순으로 배치하기 [파이썬] (0) | 2022.06.17 |