๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค ์์์ฐพ๊ธฐ
https://school.programmers.co.kr/learn/courses/30/lessons/42839
์ฝ๋
import itertools
# ์์์ธ์ง ์๋์ง ํ์ธํ๋ ํจ์
def check(x):
if x == 0 or x == 1:
return False
for k in range(2, int(x**0.5) + 1):
if x % k == 0:
return False
return True
def solution(numbers):
sep_num = list(numbers)
count = 0
remember = []
for i in range(1, len(sep_num) + 1):
arr = list(itertools.permutations(sep_num,i))
for j in range(len(arr)):
num = int(''.join(arr[j]))
if check(num) and num not in remember:
count += 1
remember.append(num)
return count
ํ์ด
# ์์์ธ์ง ์๋์ง ํ์ธํ๋ ํจ์
def check(x):
if x == 0 or x == 1:
return False
for k in range(2, int(x**0.5) + 1):
if x % k == 0:
return False
return True
0๊ณผ 1์ ์์๊ฐ ์๋๋ฏ๋ก False๋ฅผ ๋ฐํํ๋ค.
์ ์๋ก ์ค
"์์์ ์์ x๊ฐ ํฉ์ฑ์๋ฉด ๋ฃจํธx(= x**0.5)๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ฝ์๋ฅผ ๊ฐ์ง๋ค"
๋ผ๋ ํน์ฑ์ ์ด์ฉํ์ฌ ์์ธ์ง ์๋์ง ํ์ธํ๋ ํจ์๋ฅผ ์ ์ํ๋ค.
์์๋ฌธ์ ํ๋ฉด ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์ด๋ก ์ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ๋ณธ ๋ฌธ์ ์์ ๋ฌด์จ ์์๊ฐ ์๋์ง ์์๋ณด๋๊ฒ ์๋๋ผ ์์์ธ์ง ์๋์ง๋ง ํ๋ณํ๋ฉด ๋์ด์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ์ฌ์ฉํ์ง ์์๋ค.
def solution(numbers):
sep_num = list(numbers)
count = 0
remember = []
sep_num์ ์ ๋ ฅ๋ฐ์ ์ซ์๋ฅผ ํ๋์ฉ ์ชผ๊ฐ ์ข ์ด์กฐ๊ฐ๋ค์ ๋ฐฐ์ด์ด๋ค. separate number์ ์ค์๋ง๋ก ๋ณ์๋ช ์ ์ ํ๋ค.
ex) ๋ง์ฝ ์ ๋ ฅ๋ฐ์ ์ซ์๊ฐ "011"์ด๋ผ๋ฉด sep_num = ['0', '1', '1'] ์ด๋ค.
count๋ ์ข ์ด์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์์์ ๊ฐ์, ์ฆ ์ต์ข ์ ์ผ๋ก ๋ฐํํ ์ ๋ต๋ณ์๋ค.
remember์ ์์ ํ์์ผ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ์ซ์ ์ค์์ ์์๋ฅผ ํ๋ณํ ๋ ๊ฐ์ ์ซ์๋ฅผ ์ธ๊ณ count๋ฅผ +=1 ํ๋๊ฑธ ๋ฐฉ์งํ๋ ๊ธฐ์ต๋ฐฐ์ด์ด๋ค.
ex)
๋ง์ฝ ['0', '1', '1'] ๋ฐฐ์ด์ค์ ์์ 11๋ก ๋ง๋ค ์ ์๋ ์์ด์ [ '1', '1'] ๊ณผ ['1', '1']์ด ์๋ค.
๋์ ์์๊ฐ ๋ค๋ฅด๋ ์์ฐํ ๋ค๋ฅธ ์์ด์ด์ง๋ง, ๊ฒฐ๊ตญ ์ ์๋ก ๋ณด์๋ฉด ๋๊ฐ์ 11์ด๋ค.
11์ ๋๋ฒ ์ธ์ count๋ฅผ 2 ์ฆ๊ฐํ ์ ์์ผ๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ธฐ์ต ๋ฐฐ์ด์ด๋ค.
['1', '1']์ ๊ฒ์ฌํด count += 1ํ๊ณ remember ๋ฐฐ์ด์ 11์ ๋ฃ์ ํ์ ํ์์ ๊ณ์ ํ๋ค. ํ์ ['1', '1']์ ๊ฒ์ฌํ์๋ remember๋ฐฐ์ด์ 11์ด ์ด๋ฏธ ์์ผ๋ count += 1 ํ์ง ์๋๋ค.
for i in range(1, len(sep_num) + 1):
arr = list(itertools.permutations(sep_num,i))
1๊ฐ (i = 1)๋ถํฐ ์ข ์ด์กฐ๊ฐ์ ์ด ๊ฐ์(i = len(sep_num))๋งํผ์ ์ข ์ด์กฐ๊ฐ์ ๋ฝ์์ ๋ง๋ค ์ ์๋ ์์ด ๋ฆฌ์คํธ arr์ ๋ง๋ ๋ค.
ex)
num = "011"
sep_num = ['0', '1', '1']
i = 1 ์ด๋ผ๋ฉด arr = [('0'), ('1'), ('1')]
i = 2 ๋ผ๋ฉด arr = [('0, 1'), ('0, 1'), ('1, 0'), ('1, 1'), ('1, 0'), ('1, 1')]
...
for j in range(len(arr)):
num = int(''.join(arr[j]))
if check(num) and num not in remember:
count += 1
remember.append(num)
arr ๋ฐฐ์ด์ ์์ฐจ์ ์ผ๋ก ๋๋ฉฐ arr[j]๋ฅผ ํ๋์ ์ ์ํ ์ซ์ num์ผ๋ก ๋ง๋ ๋ค.
๋ง์ฝ num์ด ์์์ด๊ณ , ๊ธฐ์ต๋ฐฐ์ด์ ์๋ค๋ฉด count += 1 ํ๊ณ num์ ๊ธฐ์ต๋ฐฐ์ด์ ๋ฃ๋๋ค.
๋ค๋ฅธ ์ฝ๋
from itertools import permutations
def solution(n):
a = set()
for i in range(len(n)):
a |= set(map(int, map("".join, permutations(list(n), i + 1))))
a -= set(range(0, 2))
for i in range(2, int(max(a) ** 0.5) + 1):
a -= set(range(i * 2, max(a) + 1, i))
return len(a)
ํ์ด
๋์ ํ์ด์ ์ ์ฌํ๋ค.
for i in range(len(n)):
a |= set(map(int, map("".join, permutations(list(n), i + 1))))
๋ค๋ง ๋ค๋ฅธ์ฝ๋๋ a์ map์ ์ด์ฉํด ๋ง๋ค์ ์๋ ๋ชจ๋ ์๋ฆฟ์์ ์์ด์ ๋ฃ์๋ค์, set์ผ๋ก ๊ทธ ์ค๋ณต์ ์์ด๋ค.
a -= set(range(0, 2))
for i in range(2, int(max(a) ** 0.5) + 1):
a -= set(range(i * 2, max(a) + 1, i))
return len(a)
a์ ์์๊ฐ ์๋๊ฒ๋ค์ ๋ชจ๋ ๋บ๋ค.
a์ ์์๋ง ๋จ์์์ผ๋ ๊ทธ ๊ฐฏ์(len(a))๋ฅผ ๋ฐํํ๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ /๋๋์
- ๋ค๋ฅธ ์ฝ๋๋ฅผ ํตํด map์ ์ฉ๋์ ๋ํด ๋ค์ ์๊ธฐํ์๋ค.
- ๋์ ์ฝ๋์ ๋ค๋ฅธ ์ฝ๋์ ํ์ด๋ ๋ชจ๋ ์์ด๋ค์ ๋ฝ์์ ๊ฑฐ๊ธฐ์ ์์๋ง ๊ฑธ๋ฌ๋ธ๋ค๋ ๊ฐ์ ์ฑ๊ฒฉ์ ๊ฐ์ง๊ณ ์๋ค. ๋์ ์ฝ๋๋ ๋น๊ต์ ๊ฐ๋ ์ฑ์ ๋จ์ด์ง์ง๋ง ์ฝ๋์๋๋ ๋น ๋ฅด๊ณ , ๋ค๋ฅธ ์ฝ๋๋ ๋น๊ต์ ๊ฐ๋ ์ฑ์ ๋์ง๋ง, ์ฝ๋์๋๋ ๋๋ฆฌ๋ค.
- ์ข์ ์ฝ๋๋ ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋์ผ์ง, ์๋๊ฐ ๋น ๋ฅธ ์ฝ๋์ผ์ง ์ฐธ ๋ง์ ๊ณ ๋ฏผ์ด ๋๋ค.
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
99ํด๋ฝ ์ฝํ ์คํฐ๋ 22์ผ์ฐจ TIL + ์ด๋ถํ์ (0) | 2024.06.10 |
---|---|
99ํด๋ฝ ์ฝํ ์คํฐ๋ 11์ผ์ฐจ TIL + DFS/BFS (0) | 2024.05.30 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 9์ผ์ฐจ TIL + ์์ ํ์ (0) | 2024.05.28 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 7์ผ์ฐจ TIL + ์ ๋ ฌ (0) | 2024.05.26 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 4์ผ์ฐจ TIL + ์คํ/ํ (0) | 2024.05.23 |