[ํ๋ก๊ทธ๋๋จธ์ค/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๋ฒ : ์์ ๊ตฌํ๊ธฐ
[๋ฐฑ์ค/python] 1929๋ฒ : ์์ ๊ตฌํ๊ธฐ
๋ฌธ์ M์ด์ N์ดํ์ ์์๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ ๋ ฅ ์ฒซ์งธ ์ค์ ์์ฐ์ M๊ณผ N์ด ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 1,000,000) M์ด์ N์ดํ์ ์์๊ฐ ํ๋ ์ด์ ์๋ ์
ye333.tistory.com
2021.03.10 - [๐์๊ณ ๋ฆฌ์ฆ/๐ ๊ฐ๋ ์ ๋ฆฌ] - [ํ์ด์ฌ/python] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
[ํ์ด์ฌ/python] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ๊ณ ๋ ๊ทธ๋ฆฌ์ค ์ํ์์ธ ์๋ผํ ์คํ ๋ค์ค๊ฐ ๊ณ ์ํด ๋ธ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ง์น ์ฒด๋ก ๊ฑธ๋ฌ๋ด๋ฏ์ด ์๋ฅผ ๊ฑธ๋ฌ๋ธ๋ค๊ณ ํ์ฌ ๋ถ์ฌ์ง ์ด๋ฆ์ด๋ค. ์์์ ์์ฐ์ n์ ๋ํด ์์
ye333.tistory.com
# ์ซ์ ์กฐํฉ ์ฐพ๊ธฐ
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 ๊ด๋ จ ํฌ์คํ ์ด๋ค.
[ํ์ด์ฌ/python] ์์ด๊ณผ ์กฐํฉ : itertools ์ด์ฉํ๊ธฐ (permutations, combinations)
itertools๋ฅผ ์ด์ฉํ์ฌ ์์ด๊ณผ ์กฐํฉ์ ๊ตฌํํ๋ฉด ๋์ฑ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. 1. ์์ด : permutations(N, r) N์์ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , r๊ฐ๋ฅผ ๋ฝ์ ์์๋๋ก ๋์ดํ๋ค. ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ฝ
ye333.tistory.com
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ํ๋ค.