2021. 5. 28. 14:17ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
ํ์๋ฆฌ ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์์ต๋๋ค. ํฉ์ด์ง ์ข ์ด ์กฐ๊ฐ์ ๋ถ์ฌ ์์๋ฅผ ๋ช ๊ฐ ๋ง๋ค ์ ์๋์ง ์์๋ด๋ ค ํฉ๋๋ค.
๊ฐ ์ข ์ด ์กฐ๊ฐ์ ์ ํ ์ซ์๊ฐ ์ ํ ๋ฌธ์์ด numbers๊ฐ ์ฃผ์ด์ก์ ๋, ์ข ์ด ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์์๊ฐ ๋ช ๊ฐ์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- numbers๋ ๊ธธ์ด 1 ์ด์ 7 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
- numbers๋ 0~9๊น์ง ์ซ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- "013"์ 0, 1, 3 ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์๋ค๋ ์๋ฏธ์ ๋๋ค.
์ ์ถ๋ ฅ ์์
์์ #1
[1, 7]์ผ๋ก๋ ์์ [7, 17, 71]๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์์ #2
[0, 1, 1]์ผ๋ก๋ ์์ [11, 101]๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- 11๊ณผ 011์ ๊ฐ์ ์ซ์๋ก ์ทจ๊ธํฉ๋๋ค.
ํ์ด ๊ณผ์
์์๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์์ง๋ง N๊ฐ ์ค M๊ฐ์ ์ซ์๋ฅผ ๊ณจ๋ผ ์๋ฅผ ๋ง๋๋ ๊ณผ์ ์ด ์์ ํ์ bruteforce๋ก ๊ตฌํํ๋ค.
ํ์ด์ฌ์๋ ๋ด์ฅ๋์ด์๋ combinations ํจ์์ permutations ํจ์๊ฐ itertools ๋ชจ๋์ ์กด์ฌํ์ง๋ง, ๋ง์ฝ ์๊ฐ์ด๊ณผ๋ฅผ ๊ณ ๋ คํ๋ค๋ฉด bruteforce๋ฅผ ํตํด ๊ตฌํ ์ ์๋ค.
boolean_check ๋ฅผ ๋์ด N๊ฐ์ค M๊ฐ ์ซ์๋ฅผ ๋ฝ์ ๋ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
check_list์ set ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ํ๋ฒ ๊ฒ์ฌํ ์ซ์๋ ๋ค์ํ๋ฒ ์์ ๊ฒ์ฌ๋ฅผ ํ์ง ์๋๋ก ๊ตฌํํ๊ณ ,
์์ ์ธ์ง ํ์ธํ๋ ํจ์์ธ prime์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ก ๊ตฌํํ ๊น ํ๋ค , ๊ฐ๋ณ๊ฒ ์์๊ฐ ์๋ ์กฐ๊ฑด๋ค์ ์ด์ฉํ์ฌ ๊ตฌํํ๋ค.
def prime(n):
if n in (0,1):
return False
if n == 2:
return True
else:
s = int(n**0.5)
for i in range(2, s+1):
if n%i == 0:
return False
return True
def solution(numbers):
list_n = list(numbers)
answer = 0
check_list = set()
boolean_check = [False] * len(list_n)
def bruteforce(num, idx):
nonlocal answer
if idx == len(list_n):
if num == '':
return
if int(num) not in check_list:
check_list.add(int(num))
if prime(int(num)):
answer+=1
return
for index ,i in enumerate(list_n):
if boolean_check[index]:
continue
bruteforce('', idx+1)
boolean_check[index] = True
bruteforce(num+i , idx+1)
boolean_check[index] = False
bruteforce('', 0)
return answer
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level3] ๋ฒ ์คํธ ์จ๋ฒ (0) | 2021.05.28 |
---|---|
[Python - ๋ฐฑ์ค 16928] ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2021.04.15 |
[Python - ๋ฐฑ์ค 14226] ์ด๋ชจํฐ์ฝ (0) | 2021.04.15 |