본문 바로가기

코딩테스트/Python

[프로그래머스] 소수 찾기

내 코드

def solution(n):
    a = set([i for i in range(2,n+1)])
    
    for i in range(2,n):
        a-=set([k*i for k in range(2,n//i+1)])
    
    return len(a)

에라토스테네스의 체~ 이걸로 안푸니까 시간초과나더라ㅠ

 

다른사람 코드

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)

이사람도 에라토스테네스의 체로 풀었는데 나보다 더 효율적이게 풀었다! 

일단 처음에 set을 만들때 range이렇게만 해도 만들어진다.

for문에서 범위를 n+1까지 돌려야한다. 나는 n까지 돌렸는데 왜돌아갔지?..음..

그리고 if문을 이용해서 num에 있는지 확인하는게 더 효율적이다!! 까먹지말자!!!

num에서 뺄때도 range만 사용해서 풀었다.