포시코딩

[프로그래머스][Lv.0] 합성수 찾기 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.0] 합성수 찾기

포시 2023. 1. 5. 12:53
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120846

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

def solution(n):
    # n 이하 소수의 개수 찾기
    # n - 소수 개수 - 1(1은 약수가 1이니까)
    prime_list = []
    for i in range(2, n+1):  # 수정된 부분
        for prime in prime_list:
            if prime > i**0.5:  # 정답 후 추가된 부분
                prime_list.append(i)  
                break
            if i % prime == 0:
                break
        else:
            prime_list.append(i)
            
    return n - len(prime_list) - 1

처음에 범위를 range(2, n)으로 잡아 n을 포함시키지 못해 정답을 못찾았는데

수정 후 정답이 되는 것을 확인.

추가로, 단순히 소수 list 전체를 확인해 소수 여부를 확인하는 과정에서

대상 i의 제곱근보다 비교하는 소수가 커지면 i는 소수인 점을 이용해 연산 속도를 더 높였다.

728x90