상세 컨텐츠

본문 제목

[Python] 프로그래머스 연습문제 LV1 - 소수 찾기

카테고리 없음

by 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
반응형

댓글 영역