programmers | Lv1. μ†Œμˆ˜ μ°ΎκΈ° [Python]

yeonkΒ·2022λ…„ 2μ›” 25일
0

algorithm

λͺ©λ‘ 보기
43/88
post-thumbnail

πŸ’‘ Python 3






πŸ”— 문제

μ†Œμˆ˜ μ°ΎκΈ° [Link]






πŸ’» μ½”λ“œ

μ†Œμˆ˜ μ°ΎλŠ” 방법.. νš¨μœ¨μ„± ν…ŒμŠ€νŠΈμ—μ„œ n번 μ‹€νŒ¨ ν›„,, 효율적으둜 ν’€ 수 μžˆλŠ” 방법을 μ°Ύμ•„λ³΄μ•˜λ‹€.
λ‹€λ“€ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ‚¬μš©ν•˜λ„€.. μ˜€λŠ˜λ„ ν•˜λ‚˜ 더 λ°°μ› λ‹€ !!

# μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 
def solution(n):
    import math
    prime_list = [True] * (n+1) # True λ©΄ μ†Œμˆ˜
    k = math.ceil(math.sqrt(n)) # n의 μ΅œλŒ€ μ•½μˆ˜ sqrt(n)
    for i in range(2, k + 1):
        if prime_list[i]:
            for j in range(i+i, n+1, i):
                prime_list[j] = False # i의 배수 λͺ¨λ‘ false둜 λ°”κΎΈκΈ°
                
    return prime_list.count(True) -2 # 0, 1에 ν•΄λ‹Ήν•˜λŠ” 인덱슀 μ œμ™Έ






πŸ’₯ λ‹€λ₯Έ μ‚¬λžŒ μ½”λ“œ

set을 μ΄λ ‡κ²Œ ν™œμš©ν•  수 μžˆκ΅¬λ‚˜..
n이 컀질수둝 속도 차이가 μžˆκ² μ§€λ§Œ 훨씬 κ°„κ²°ν•˜λ‹€..

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)






참고 자료

[Algorithm] μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체
[python]μ†Œμˆ˜ μ°ΎκΈ° - μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체
[Python] 반올림, 올림, λ‚΄λ¦Ό
[Python] μ†Œμˆ˜ κ΅¬ν•˜κΈ° (μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체)

0개의 λŒ“κΈ€