[ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ ์ฐ์ต] ์ฐ์ต๋ฌธ์ - Lv1. ์์ ์ฐพ๊ธฐ
๋ฌธ์ ์ค๋ช
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๋ฅผ ๋ฐํ
์ ์ถ
- '์๋ผํ ์คํ ๋ค์ค์ ์ฒด' ์ฌ์ฉ
- import math ํด์ math.sqrt()๋ฅผ ์ฌ์ฉํ๋ ๋์ ** 0.5 ์ฌ์ฉ
def solution(n):
# ์๋ผํ ์คํ
๋ค์ค์ ์ฒด ์ด๊ธฐํ: n๊ฐ ์์์ True ์ค์ (์์๋ก ๊ฐ์ฃผ)
sieve = [True] * (n + 1)
answer = 0
# n์ ์ต๋ ์ฝ์๊ฐ sqrt(n) ์ดํ์ด๋ฏ๋ก i=sqrt(n)๊น์ง ๊ฒ์ฌ
m = int(n ** 0.5)
for i in range(2, m + 1):
if sieve[i] == True: # i๊ฐ ์์์ธ ๊ฒฝ์ฐ
for j in range(i + i, n + 1, i): # i์ดํ i์ ๋ฐฐ์๋ค์ False ํ์
sieve[j] = False
# ์์ ๋ชฉ๋ก ์ฐ์ถ
return len([i for i in range(2, n + 1) if sieve[i] == True])
๋ค๋ฅธ์ฌ๋์ ํ์ด
- ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ๋์ฑ ๊ฐ๋จํ๊ฒ ์์ฑํ์๋ค
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)
728x90