소수 찾기
문제: https://programmers.co.kr/learn/courses/30/lessons/12921
1. 문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
2. 나의 코드
- 소수 찾기 문제는 구글링만 하면 쉽게 솔루션을 찾을 수 있지만, 이번 문제에서는 풀이보다 효율성이 더 중요한 문제였다.
- 에라토스테네스의 체를 이용하여 문제를 풀었다.
- 주어진 수의 범위 내에서 순서대로 2의 배수를 지우고, 3의배수를 지우고 이런 방식으로 계속 해서 마지막까지 지운다. 남는 수가 바로 소수!
- Time complexity : O(nlogn)
- 계산의 편리성을 위해 n+1 크기의 리스트를 만든다.
- 더미 부분인 isPrime[0]과 소수가 아닌 isPrime[1] 을 False로 한다.
- 나머지 부분은 True로 세팅
- 두개의 for문을 통해 인덱스가 배수에 해당하면, False로 바꾼다.
- True의 개수를 세고 리턴!
import math def solution(n): answer = 0 isPrime = [False] isPrime = isPrime + ([True]*n) isPrime[1] = False for i in range(2,n): for j in range(2,n): if i*j <= n: if isPrime[i*j]: isPrime[i*j] = False else: break answer = isPrime.count(True) return answer
3. 다른 사람의 코드
-집합인 set을 사용하여, 차집합을 사용해 풀었다.
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)
'Computer Science > 알고리즘 문제풀이' 카테고리의 다른 글
Programmers > 완전탐색 > #26 소수찾기(level 2) [JAVA] (0) | 2018.11.07 |
---|---|
Programmers > #25 winter recruit > #1 [JAVA] (0) | 2018.10.29 |
Programmes > #23 문자열 내 마음대로 정렬하기 [Python] (0) | 2018.10.18 |
Programmers > Hash > #22 위장 [JAVA] (0) | 2018.10.18 |
Programmers > Sort > #21 H-Index [JAVA] (0) | 2018.10.18 |