๋ฌธ์
์ฃผ์ด์ง ์ N๊ฐ ์ค์์ ์์๊ฐ ๋ช ๊ฐ์ธ์ง ์ฐพ์์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ์ค์ ์์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. N์ 100์ดํ์ด๋ค. ๋ค์์ผ๋ก N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋๋ฐ ์๋ 1,000 ์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฃผ์ด์ง ์๋ค ์ค ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ
ํด์ค ์ฝ๋
n = int(input())
num_list = list(map(int, input().split()))
count = 0
def is_prime(num):
if num == 1: # 1์ ์์๊ฐ ์๋๋ค
return False
i = 2
while i < num:
if num % i == 0:
return False
i += 1
return True
for num in num_list:
if is_prime(num): # true์ธ ๊ฒฝ์ฐ์ count๊ฐ ์ํ๋จ
count += 1
print(count)
์์๋?
์์๋ ์์ด๋ก Prime Number ๋ก์,
1๊ณผ ์๊ธฐ์์ ์ธ์๋ ์ด๋ ํ ์๋ก๋ ๋๋์ด ๋จ์ด์ง์ง ์๋ ์์ด๋ค.
์์๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
ํน์ ์ n์ด ์์์ธ์ง ์๋์ง ํ๋ณํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์ '์์์ ํน์ง'์ ํ์ฉํ์ฌ 2๋ถํฐ n-1 ๊น์ง์ ์๋ก ํด๋น ์๋ฅผ ๋๋ ๋ณด๊ณ , ์ด ๊ณผ์ ์์ ์ด๋ ํ ์์ ์ํด ๋๋์ด ๋จ์ด์ง๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
๋๋์ด๋จ์ด์ง์ง ์๋๋ค๋ฉด ํด๋น ์๋ ์์์ธ ๊ฒ์ด๊ณ , ๋์ค์ ๋ค๋ฅธ ์์ ์ํด ๋๋์ด ๋จ์ด์ง๋ค๋ฉด ๊ทธ ์๋ ์์๊ฐ ์๋ ๊ฒ์ด๋ค.
2,3,4, ... , n - 1
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False # i๋ก ๋๋์ด ๋จ์ด์ง๋ฉด ์์๊ฐ ์๋๋ฏ๋ก False ๋ฆฌํด
return True # False๊ฐ ๋ฆฌํด๋์ง ์๊ณ for๋ฌธ์ ๋น ์ ธ๋์๋ค๋ฉด ์์์ด๋ฏ๋ก True ๋ฆฌํด
์ ๋ฐฉ์์ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฐ๋ ์ซ์ X์ ๋ํ์ฌ 2 ~ n-1๋ฒ๊น์ง, ์ฆ n-2 ๋ฒ์ ์ฐ์ฐ์ด ํ์ํ๋ฉฐ ์ด๋ ์๊ฐ๋ณต์ก๋ O(x)๋ก ํํํ ์ ์๊ฒ ๋ค.
ํ์ง๋ง ์ฝ์์ ํน์ฑ์ ํ์ฉํด์ ์ด ์ฐ์ฐ ํ์๋ฅผ ๋ฐ์ผ๋ก ์ค์ผ ์ ์๋ค.
**์ฝ์์ ํน์ฑ์ด๋, ํน์ ์ n์ ์ฝ์๋ค์ ์ผ๋ ฌ๋ก ๋์ดํ์ ๋ ๊ทธ ์ค ๊ฐ์ด๋ฐ์ ์๋ฅผ ์ค์ฌ์ผ๋ก ์ฝ์๊ฐ ๋์นญ๋๋ค๋ ๊ฒ์ด๋ค.
36์ ์๋ก ๋ค์ด๋ณด์.
16์ ์ฝ์๋ค์ ์ผ๋ ฌ๋ก ๋์ดํ๋ฉด 1, 2, 3, 4, 6, 9, 12, 18, 36์ด ๋๋ค.
์ค๊ฐ๊ฐ 6๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์์ ๋ณด๋ฉด ์ฝ์๋ค์ด ์๋ก ๋์นญ๋๊ณ ์์์ ํ์ธํ ์ ์๋ค.
(1 * 36 = 18 * 2 = 3 * 12 = 4 * 9 = 6 * 6)
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ 36์ ์ฝ์๋ฅผ ์ฐพ๊ณ ์ถ๋ค๋ฉด 36์ ์ฝ์์ ์ค๊ฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์ชฝ๋ง ๊ฒ์ฌ๋ฅผ ํ๋๋ผ๋ ๋ค๋ฅธ ์ชฝ์ ์ฝ์๋ค์ ์ ์ ์๋ค.
์ฆ, ์ค๊ฐ๊ฐ์ ์ฐพ๊ณ ์ํ๋ ์์ ์ ๊ณฑ๊ทผ ๊ฐ (sqrt ํจ์๋ฅผ ์ด์ฉ) ์ผ๋ก ๊ฐ์ ํด ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ด ์ ๊ณฑ๊ทผ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์ฝ์๊ฐ ํ๋๋ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ ๊ณฑ๊ทผ ๊ฐ ๊ธฐ์ค ์ค๋ฅธ์ชฝ์๋ ์ฝ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๊ณ ํ์ ํ๋ค.
์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ ํ์ด
# ์ ๊ณฑ๊ทผ์ ๊ตฌํ๊ธฐ ์ํด math ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import math
def is_prime(n):
for i in range(2, int(math.sqrt(n))+1): # n์ ์ ๊ณฑ๊ทผ์ ์ ์ํ ์์ผ์ค ํ + 1, rangeํจ์ ํน์ฑ
if n % i == 0:
return False
return True
#1. .split() ์ฌ์ฉ
๋ฌธ์์ด ๋๋๋ ๋ฐฉ๋ฒ, ์งํฉ์์ ๊ฒฐ๊ณผ๊ฐ ํํ๋จ
>>> a = "Life is too long"
>>> a.split()
['Life', 'is', 'too', 'long']
>>> b = "a:b:c"
>>> b.split(':')
['a', 'b', 'c']
split ํจ์๋ a.split() ์ฒ๋ผ ๊ดํธ ์์ ์๋ฌด ๊ฐ๋ ๋ฃ์ด ์ฃผ์ง ์์ผ๋ฉด ๊ณต๋ฐฑ(์คํ์ด์ค, ํญ, ์ํฐ ๋ฑ)์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ๋๋์ด ์ค๋ค.
๋ง์ฝ b.split(':')์ฒ๋ผ ๊ดํธ ์์ ํน์ ๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ ๊ดํธ ์์ ๊ฐ์ ๊ตฌ๋ถ์๋ก ํด์ ๋ฌธ์์ด์ ๋๋์ด ์ค๋ค.
์ด๋ ๊ฒ ๋๋ ๊ฐ์ ๋ฆฌ์คํธ์ ํ๋์ฉ ๋ค์ด๊ฐ๊ฒ ๋๋ค. ['Life', 'is', 'too', 'long'] ์ด๋ ['a', 'b', 'c']์์ split ์ ์ฉํด๋ณด๊ธฐ ๋