-
프로그래머스Lv.1 - 소수 찾기알고리즘 2019. 12. 23. 10:11
1. 문제
- 언어 : python3
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환2. 풀이 결과(소스코드)
def solution(n): # 짝수는 소수가 아니므로, 3~n까지 홀수값만 있는 배열 생성 numbers = set([i for i in range(3, n+1, 2)]) for i in range(3, n+1, 2): if i in numbers: # 특정수의 배수는 나누어지는 수가 있는 것이므로 해당 숫자를 배열을 돌면서 해당 배수 삭제 numbers -= set([i for i in range(i*2, n+1, i)]) # 배열생성시 3부터 시작했으므로 가장 작은 소수인 2는 제외됨, 따라 +1을 하여 최종적인 소수의 개수 완성 answer = len(numbers)+1 return answer
3. 회고
소수는 나눠지는 수가 1, 자신 뿐이므로 입력받은수(n)-1까지 이중 for문으로 나누는 것으로 접근했는데 속도 테스트에서 계속 실패했다.
찾아보니 에라토스테네스의 체라는 접근법이 있어서 이대로 했더니 속도가 비교가 안된다...
접근방법은 아래와 같고 자세한 내용은 링크 참고!
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
- 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색)
- 자기 자신을 제외한 2의 배수를 모두 지운다.
- 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색)
- 자기 자신을 제외한 3의 배수를 모두 지운다.
- 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색)
- 자기 자신을 제외한 5의 배수를 모두 지운다.
- 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색)
- 자기 자신을 제외한 7의 배수를 모두 지운다.
- 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.
에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수(소쑤)를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색) 자기 자신을 제외한 2의 배수를 모두 지운다. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초
ko.wikipedia.org
프로젝트의 규모가 커질수록 속도가 중요하니 알고리즘과 수학쪽 과목도 다음 학기때 꼭 수강해야겠다.
'알고리즘' 카테고리의 다른 글
프로그래머스 Lv.2 스택/큐 - 프린터 with 파이썬 (0) 2020.01.14 프로그래머스 Lv.1 - 파보나치수 with 파이썬 (0) 2020.01.13 코드업 기초 100제 - 1098 : [기초-2차원배열] 설탕과자 뽑기 (0) 2019.12.03 코드업 기초 100제 - 1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기 (0) 2019.12.02 코드업 기초 알고리즘 100제 완주-파이썬 (0) 2019.11.17