[ํ๋ก๊ทธ๋๋จธ์ค/python] ์์ ํ์ : ์์ ์ฐพ๊ธฐ
๋ฌธ์ ์ค๋ช
ํ์๋ฆฌ ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์์ต๋๋ค. ํฉ์ด์ง ์ข ์ด ์กฐ๊ฐ์ ๋ถ์ฌ ์์๋ฅผ ๋ช ๊ฐ ๋ง๋ค ์ ์๋์ง ์์๋ด๋ ค ํฉ๋๋ค.
๊ฐ ์ข ์ด ์กฐ๊ฐ์ ์ ํ ์ซ์๊ฐ ์ ํ ๋ฌธ์์ด numbers๊ฐ ์ฃผ์ด์ก์ ๋, ์ข ์ด ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์์๊ฐ ๋ช ๊ฐ์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- numbers๋ ๊ธธ์ด 1 ์ด์ 7 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
- numbers๋ 0~9๊น์ง ์ซ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- "013"์ 0, 1, 3 ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์๋ค๋ ์๋ฏธ์ ๋๋ค.
์ ๋ต
import itertools
def solution(numbers):
answer = {}
numbers = list(numbers)
# ํฐ ์๋ถํฐ ์ ๋ ฌ
numbers.sort(reverse=True)
# ๊ฐ์ฅ ํฐ ์ ์กฐํฉ
max_number = ""
for i in numbers:
max_number += str(i)
max_number = int(max_number)
# ์์ True๋ก ์ ์ฅํ๊ธฐ
idx = [True for i in range(max_number + 1)]
idx[0] = False
idx[1] = False
for i in range(2, int(max_number**0.5)+1):
if idx[i]:
for j in range(2*i, max_number+1, i):
idx[j] = False
# ์ซ์ ์กฐํฉ ์ฐพ๊ธฐ
for i in range(1, len(numbers)+1):
target = list(map(''.join, itertools.permutations(numbers, i)))
for j in target:
if int(j) not in answer:
answer[int(j)] = idx[int(j)]
result = 0
for v in answer.values():
if v == True:
result += 1
return result
numbers = list(numbers)
# ํฐ ์๋ถํฐ ์ ๋ ฌ
numbers.sort(reverse=True)
# ๊ฐ์ฅ ํฐ ์ ์กฐํฉ
max_number = ""
for i in numbers:
max_number += str(i)
max_number = int(max_number)
๋ฐ์ ์ซ์๋ฆฌ์คํธ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ
์กฐํฉํ์ฌ ๋์ฌ ์ ์๋ ๊ฐ์ฅ ํฐ ์์ธ max_number๋ฅผ ๊ตฌํ๋ค.
# ์์ True๋ก ์ ์ฅํ๊ธฐ
idx = [True for i in range(max_number + 1)]
idx[0] = False
idx[1] = False
for i in range(2, int(max_number**0.5)+1):
if idx[i]:
for j in range(2*i, max_number+1, i):
idx[j] = False
์ ์ ํ์๋ ์์๊ตฌํ๊ธฐ ๋ฌธ์ ์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ max_number๊น์ง์ ์์๋ฅผ ๊ตฌํ๋ค.
์์๊ตฌํ๊ธฐ ๋ฌธ์ ์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ํฌ์คํ ์ ์๋์ ๊ฑธ์ด๋์๋ค.
2021.03.09 - [๐์๊ณ ๋ฆฌ์ฆ/๋ฐฑ์ค] - [๋ฐฑ์ค/python] 1929๋ฒ : ์์ ๊ตฌํ๊ธฐ
2021.03.10 - [๐์๊ณ ๋ฆฌ์ฆ/๐ ๊ฐ๋ ์ ๋ฆฌ] - [ํ์ด์ฌ/python] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
# ์ซ์ ์กฐํฉ ์ฐพ๊ธฐ
for i in range(1, len(numbers)+1):
target = list(map(''.join, itertools.permutations(numbers, i)))
for j in target:
if int(j) not in answer:
answer[int(j)] = idx[int(j)]
numbers ๋ฆฌ์คํธ์ ์๋ ์ซ์๋ก ๋ง๋ค ์ ์๋ ์ซ์ ์กฐํฉ์ ์ฐพ๋๋ค.
ํ์๋ฆฌ ์ซ์๋ถํฐ numbers์ ๋ชจ๋ ์ซ์๋ฅผ ์ฌ์ฉํ๋ ์กฐํฉ๊น์ง ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ตฌํ๋ค.
itertools์ permutations๋ฅผ ์ฌ์ฉํ์ฌ ์์ด์ ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค.
์๋๋ itertools ๊ด๋ จ ํฌ์คํ ์ด๋ค.
answer์ ํด๋น ์กฐํฉ์ ์ซ์๊ฐ ์๋ค๋ฉด, answer ๋์ ๋๋ฆฌ์ ํด๋น idx ๊ฐ๊ณผ ํจ๊ป ๋ฃ์ด์ค๋ค.
๋์ ๋๋ฆฌ์ ๋ฃ๋ ์ด์ ๋ 11, 011์ฒ๋ผ ๊ฐ์ ์๊ฐ ์ค๋ณตํด์ ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
answer์ ์ ์ฅ๋ key์ value๊ฐ True๋ผ๋ฉด key๊ฐ ์์๋ผ๋ ๋ป์ด๊ณ , False๋ผ๋ฉด ์์๊ฐ ์๋๋ผ๋ ๋ป์ด๋ค.
result = 0
for v in answer.values():
if v == True:
result += 1
return result
answer์ ์ ์ฅ๋ value๊ฐ True์ธ key๋ฅผ ์ธ์ด result์ ์ ์ฅํ ํ result๋ฅผ returnํ๋ค.