카테고리 없음
[Python] 프로그래머스 연습문제 LV1 - 소수 찾기
Gopythor
2022. 7. 15. 22:55
728x90
반응형
소수 찾기
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
- n은 2이상 1000000이하의 자연수입니다.
n | result |
10 | 4 |
5 | 3 |
입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
내 코드
def solution(n):
num = [True] * (n+1)
count = 0
for i in range(2, n+1):
if num[i] == True:
for mul in range(i+i, n+1, i):
num[mul] = False
for j in range (2, n+1):
if num[j] == True:
count += 1
return count
- 이 문제를 풀려면 에라토스테네스의 체를 사용해야 한다(효율성 문제).
- 개념은 소수의 배수를 소거하는 것이다.
- 주어진 수+1 만큼 True 를 가진 num 리스트를 생성한다.
- True의 갯수를 저장할 count 선언
- for 루프는 2부터 n숫자까지 돈다.
- num[i]가 True이면 i의 배수는 전부 False 처리가 된다.
- 다음 for 루프에서는 True갯수만큼 count를 증가시켜준다.
다른 사람 코드
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)
- num은 2에서 n까지 숫자를 가진다.
- i는 2에서 n까지 루프를 돈다.
- num 의 차집합이 num에 저장이 된다.
- num의 길이가 소수의 길이이다.
728x90
반응형