Algorithm/Programmers

[프로그래머스] 소수찾기 / Python / 효율성 테스트

728x90
반응형

✔ 문제 설명
 - 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
 - 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.)
✔ 제한 조건
 - n은 2이상 1000000이하의 자연수입니다.

 

아래는 처음 제출한 코드이다. 효율성 테스트에서 통과하지 못하고 시간초과.

def solution(n):
    answer = 0
    arr = [0] * (n+1)
    for i in range(2, n+1):
        if arr[i] == 1:
            continue
        for k in range(2, i+1):
            if i % k == 0:
                if i != k:
                    arr[i] = 1
                    break
        else:
            answer += 1
        for j in range(i, n+1, i):
            arr[j] = 1
    return answer

 

덕봇기의 도움을 받아 다시 작성한 코드. 무사히 통과되고 점수도 8점이나 받았다🙌

def solution(n):
    answer = 0
    arr = [0] * (n+1)
    for i in range(2, n+1):
        if arr[i] == 1:
            continue
        answer += 1
        for k in range(i, n+1, i):
            arr[k] = 1

    return answer
반응형