https://school.programmers.co.kr/learn/courses/30/lessons/42839
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
* ์์๋ 1๊ณผ ์๊ธฐ ์์ ์ธ์ ๋๋์ด ๋จ์ด์ง์ง ์๋ ์๋ฅผ ๋งํฉ๋๋ค.
1. ์ซ์ ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ์ซ์ ์กฐํฉ ์ฐพ๊ธฐ
python ์ itertools ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๊ฐํธํ๊ฒ ๋ชจ๋ ์กฐํฉ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ permutations ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
from itertools import permutations
def get_all_combinations(numbers):
all_combinations = set() # set ์ ์ฌ์ฉํ์ฌ ์ค๋ณต๋ ์ซ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
# 1์๋ฆฌ๋ถํฐ len(numbers) ์๋ฆฌ๊น์ง์ ๋ชจ๋ ์กฐํฉ์ ์ฐพ์ต๋๋ค.
for i in range(1, len(numbers) + 1):
# permutations ๋ฅผ ์ฌ์ฉํด i ์๋ฆฌ์ ๋ชจ๋ ์กฐํฉ์ ๋ง๋ญ๋๋ค.
for combo in permutations(numbers, i ):
# tuple์ ๋ฌธ์์ด๋ก ํฉ์ณ์ ์ซ์๋ก ๋ณํํฉ๋๋ค.
number = int(''.join(combo))
# set์ ์ถ๊ฐํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํฉ๋๋ค.
all_combinations.add(number)
return all_combinations
- permutations(numbers, i)๋ numbers์์ i๊ฐ์ ์ซ์๋ฅผ ์ ํํด ๋ง๋ค ์ ์๋ ๋ชจ๋ ์์ด์ ์์ฑํฉ๋๋ค.
- ''.join(combo)๋ tuple๋ก ๋ ์กฐํฉ์ ๋ฌธ์์ด๋ก ํฉ์นฉ๋๋ค.
- int()๋ ๋ฌธ์์ด์ ์ ์๋ก ๋ณํํฉ๋๋ค.
- set์ ์ฌ์ฉํ์ฌ ์ค๋ณต๋ ์ซ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
2. ์์ ํ๋ณ ํจ์ ์์ฑ
์ฃผ์ด์ง ์ซ์๊ฐ ์์์ธ์ง ํ๋ณํ๊ธฐ ์ํด ๋ค์์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
def is_prime(n):
if n < = 1:
return False # 1 ์ดํ์ ์ซ์๋ ์์๊ฐ ์๋๋๋ค.
if n == 2:
return True # 2๋ ์์์
๋๋ค.
if n % 2 == 0 :
return False # ์ง์๋ ์์๊ฐ ์๋๋๋ค.
# 3๋ถํฐ n์ ์ ๊ณ ๊ธ๊น์ง์ ํ์๋ก ๋๋์ด ๋จ์ด์ง๋์ง ํ์ธํฉ๋๋ค.
for i in range (3, int(n ** 0.5) + 1 , 2):
if n % i == 0:
return False # i ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด ์์๊ฐ ์๋
return True # ๋๋์ด ๋จ์ด์ง์ง ์์ผ๋ฉด ์์ ์
๋๋ค.
#ํ
์คํธ ์์
print(is_prime(29)) # True
print(is_prime(30)) # False
- 1 ์ดํ์ ์ซ์๋ ์์๊ฐ ์๋๋๋ค.
- 2๋ ์ ์ผํ ์ง์ ์์์ ๋๋ค.
- 2๋ก ๋๋์ด ๋จ์ด์ง๋ ์๋ ์์๊ฐ ์๋๋๋ค.
- 3๋ถํฐ n\sqrt{n}๊น์ง์ ๋ชจ๋ ํ์๋ก ๋๋์ด ๋ณด์ ๋๋์ด ๋จ์ด์ง๋ฉด ์์๊ฐ ์๋๋๋ค.
for ๋ฌธ ๊ตฌ์กฐ ์ค๋ช
for i in range(3, int(n ** 0.5) + 1, 2): ๊ตฌ๋ฌธ์ 3๋ถํฐ n\sqrt{n}๊น์ง์ ํ์๋ง์ ํ์ธํฉ๋๋ค. ์ด๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ์์ ํ๋ณ์ ํ ์ ์์ต๋๋ค.
range ํจ์ ์ดํด
range(start, stop, step) ํจ์๋ start์์ ์์ํ์ฌ stop ์ ๊น์ง step ๊ฐ๊ฒฉ์ผ๋ก ์ซ์๋ฅผ ์์ฑํฉ๋๋ค.
for i in range(3, int(n ** 0.5) + 1, 2):
์ด ๋ถ๋ถ์ ๋ ์์ธํ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- start = 3: 3๋ถํฐ ์์ํฉ๋๋ค. 2๋ ์ด๋ฏธ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํ์์ธ 3๋ถํฐ ์์ํฉ๋๋ค.
- stop = int(n ** 0.5) + 1: n\sqrt{n}์ ์ ์ ๋ถ๋ถ์ 1์ ๋ํ ๊ฐ๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, n์ด 25๋ผ๋ฉด 25=5\sqrt{25} = 5์ด๋ฏ๋ก, range(3, 6, 2)๊ฐ ๋ฉ๋๋ค.
- step = 2: 2์ฉ ์ฆ๊ฐํฉ๋๋ค. ์ฆ, ํ์๋ง ๊ฒ์ฌํฉ๋๋ค.
3. ๋ชจ๋ ์กฐํฉ์ ๋ํด ์์์ธ์ง ํ๋ณ
์์ ๋ง๋ ์กฐํฉ๊ณผ ์์ ํ๋ณ ํจ์๋ฅผ ์ฌ์ฉํด ์ต์ข ์ ์ผ๋ก ์์์ ๊ฐ์๋ฅผ ์ ๋๋ค.
def solution(numbers):
all_combinations = get_all_combinations(numbers)
prime_count = 0
for number in all cobinations:
if is_prime(number):
prime_count += 1
return prime_count
# ํ
์คํธ ์์
print(solution("17")) # 3
print(solution("011")) # 2
- get_all_combinations(numbers)๋ฅผ ํธ์ถํด ๋ชจ๋ ๊ฐ๋ฅํ ์ซ์ ์กฐํฉ์ ๊ตฌํฉ๋๋ค.
- ๊ฐ ์กฐํฉ ์ซ์๊ฐ ์์์ธ์ง is_prime(number) ํจ์๋ฅผ ์ฌ์ฉํด ํ์ธํฉ๋๋ค.
- ์์์ธ ๊ฒฝ์ฐ prime_count๋ฅผ ์ฆ๊ฐ์ํต๋๋ค
์ ์ฒด ์ฝ๋
from itertools import permutations
def get_all_combinations(numbers):
all_combinations = set()
for i in range(1, len(numbers) + 1):
for combo in permutations(numbers, i):
number = int(''.join(combo))
all_combinations.add(number)
return all_combinations
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, int(n ** 0.5) + 1, 2):
if n % i == 0:
return False
return True
def solution(numbers):
all_combinations = get_all_combinations(numbers)
prime_count = 0
for number in all_combinations:
if is_prime(number):
prime_count += 1
return prime_count
# ํ
์คํธ ์์
print(solution("17")) # 3
print(solution("011")) # 2
'์๊ณ ๋ฆฌ์ฆ ๐ก > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์กฐ์ด์คํฑ Greedy (1) | 2024.09.01 |
---|---|
ํ์๋ฒ(Greedy) ์ฒด์ก๋ณต (1) | 2024.08.31 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ _ ํ์ด์ฌ (0) | 2024.06.16 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ๊ฒฉ์ด ์ ์ผ ๋น์ผ ์ํ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ _ SQL (1) | 2024.06.16 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ธ๊ท ์ฆ์_ํ์ด์ฌ ํ์ด (0) | 2024.06.13 |