프로그래머스 소수찾기

최준근·2021년 9월 28일
0

문제설명

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

제한 조건
n은 2이상 1000000이하의 자연수입니다

1부터 10 사이의 소수는 [2,3,5,7] 이므로 4를 리턴

생각하기

  1. 입력값 n에 대해 집합을 만든다
  2. 2부터 n+1까지 검색
  3. i 가 sosu집합에 있다면 i의 배수를 제거
  4. 남은 sosu집합의 개수가 정답

내 코드

 def solution(n):
    sosu = set(range(2,n+1))
    for i in range(2, n+1):
        if i in sosu:
            sosu -= set(range(i*2, n+1, i))
    return len(sosu)

코드 해석

  1. sosu = set(range(2,n+1)) -- range로 2부터 n+1까지 집합을 만들어준다.
  2. for i in range(2, n+1): -- 2부터 n+1 까지 탐색을한다.
  3. if i in sosu: -- 소수집합 안에 i가 있다면
  4. sosu -= set(range(i*2,n+1,i)) -- ex)n=2 -- 4부터 끝까지 2씩 늘려가며... 집합을 만들고 sosu 집합에서 2의 배수 집합을 삭제
  5. return len(sosu) --- 검색을 마친 sosu는 소수들의 집합이므로 sosu의 개수가 정답
profile
느려도 좋으니 꾸준하게

0개의 댓글