프로그래머스 – 소수 찾기 문제 Python

프로그래머스 문제풀이

문제

문제설명

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

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

제한사항

  • n은 2이상 1000000이하의 자연수입니다.

입출력 예

nresult
104
53

입출력 예 설명

입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환

입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환

문제해결과정

  1. 1부터 n사이의 소수의 수를 찾는다.

위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.

나의 풀이

반복문을 2~n까지 돌려주며 소수를 구하고 카운팅한다.

def solution(n):
    answer = 1
    for i in range(2,n+1):                  # 2~n까지 반복
        cnt = 0                             # cnt 변수 0으로 초기화
        if i%2!=0:                          
            for j in range(1,int(i**0.5+1)):
                if i%j==0:                  
                    cnt += 1 
                if cnt>1:
                    break
        if cnt==1:                          # cnt가 1인 경우 소수 
            answer+=1
    return answer

다른 사람의 풀이

차집합을 사용한 다른 풀이 방법을 가져와봤습니다.

i 본인을 제외한 배수들이 num에 있다면 빼주는 풀이방식이다.

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)