โ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/42839
์ฑ๋ฅ ์์ฝ
์ฝ๋ 1 โก๏ธ ๋ฉ๋ชจ๋ฆฌ: 280 MB, ์๊ฐ: 860.28 ms
์ฝ๋ 2 โก๏ธ ๋ฉ๋ชจ๋ฆฌ: 10.4 MB, ์๊ฐ: 2639.75 ms
๋ฌธ์ ์ค๋ช
ํ์๋ฆฌ ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์์ต๋๋ค. ํฉ์ด์ง ์ข ์ด ์กฐ๊ฐ์ ๋ถ์ฌ ์์๋ฅผ ๋ช ๊ฐ ๋ง๋ค ์ ์๋์ง ์์๋ด๋ ค ํฉ๋๋ค.
๊ฐ ์ข ์ด ์กฐ๊ฐ์ ์ ํ ์ซ์๊ฐ ์ ํ ๋ฌธ์์ด numbers๊ฐ ์ฃผ์ด์ก์ ๋, ์ข ์ด ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์์๊ฐ ๋ช ๊ฐ์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- numbers๋ ๊ธธ์ด 1 ์ด์ 7 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
- numbers๋ 0~9๊น์ง ์ซ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- "013"์ 0, 1, 3 ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์๋ค๋ ์๋ฏธ์ ๋๋ค.
์ ์ถ๋ ฅ ์
numbers | return |
"17" | 3 |
"011" | 2 |
โ๐ปํ์ด
์ฝ๋1 ํ์ด
permutations๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฅํ ์ซ์์ ์กฐํฉ์ ์ฐพ๋๋ค.
0๊ณผ 1์ ์งํฉ์์ ์ ๊ฑฐํ๋ค.
์๋ผํ ์คํ
๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์์๊ฐ ์๋ ์๋ฅผ ์ ๊ฑฐํ๋ค.
์ฝ๋2 ํ์ด
๊ฐ๋ฅํ ์ซ์์ ์กฐํฉ์ ๋ชจ๋ ์ฐพ๋๋ค.
ํ์ฌ ์ซ์๊ฐ ์์๋ผ๋ฉด ์งํฉ์ ๋ฃ๋๋ค.
๐ป์ฝ๋
# permutations๋ฅผ ์ฌ์ฉํ ํ์ด
from itertools import permutations
def solution(numbers):
nums = set()
for i in range(len(numbers)): # ๊ฐ๋ฅํ ์ซ์ ์กฐํฉ ์ฐพ๊ธฐ
nums |= set(map(int, map("".join, permutations(list(numbers), i + 1))))
nums -= set(range(0, 2)) # 0๊ณผ 1์ ์ ๊ฑฐ
for i in range(2, int(max(nums) ** 0.5) + 1): # ์๋ผํ ์คํ
๋ค์ค์ ์ฒด
nums -= set(range(i * 2, max(nums)+ 1, i)) # i์ ๋ฐฐ์๋ฅผ ์ ๊ฑฐ
return len(nums)
# ๋ฐฑํธ๋ํน ๊ฐ์ง ์์ ๋ฐฑํธ๋ํน ํ์ด
nums = set()
def isprime(num):
if num == 0 or num == 1:
return False
i = 2
for i in range(2, num):
if num % i == 0:
return False
return True
def backtracking(length, numbers, visit, num):
if len(num) == length:
if isprime(int(num)):
nums.add(int(num))
return
for i in range(len(numbers)):
if not visit[i]:
visit[i] = True
backtracking(length, numbers, visit, num + numbers[i])
visit[i] = False
def solution(numbers):
visit = [False] * len(numbers)
for i in range(1, len(numbers) + 1):
for j in range(len(numbers)):
if not visit[j]:
visit[j] = True
backtracking(i, numbers, visit, numbers[j])
visit[j] = False
return len(nums)
๐ก์๋ก ๋ฐฐ์ด ๋ด์ฉ
|= ์ฐ์ฐ์
- '|'๋ or์ ์๋ฏธํ๋ฏ๋ก ์ฆ, union์ ๋ปํ๋ค.
- '|='์ ํ์ฌ ์งํฉ์ ์๋ก์ด ์์๋ฅผ ๋ฃ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ซ์ ** 0.5 โก๏ธ ์ ๊ณฑ๊ทผ ํํ
permutations ์์ดํจ์
- permutations(๋ฆฌ์คํธ, ์ ํํ ์์ ์)
combinations ์กฐํฉํจ์
- combinations(๋ฆฌ์คํธ, ์ ํํ ์์ ์)
permutations, combinationsํจ์ ์ฌ์ฉ ์ itertools๋ก๋ถํฐ importํด์ ์ฌ์ฉ.
๐ํ๊ธฐ
์ ์ c++๋ก ํ์์ ๋ permutatio ์ฌ์ฉํ๋๋ฐ c++๋ก ํ ๋ permutation์ฐ๋ฉด ์๊ฐ ์ด๊ณผ๋ฅผ ๋๋ฌด ๊ฒช์๋๋ permutations๋ฅผ ์ธ ์๊ฐ์ ๋ชป ํ๋ค..
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํํฐ์ด] ์ง๊ฒ๋ค๋ฆฌ/Python - Lv.3 (0) | 2024.10.30 |
---|---|
[์ํํฐ์ด] ์ฅ์ ๋ฌผ ์ธ์ ํ๋ก๊ทธ๋จ/Python - Lv.2 (0) | 2024.10.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] ์์ถ/Python - Lv.2 (1) | 2024.10.24 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ฐฐ์์/Java - Lv.2 (0) | 2024.10.24 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ ์ธํ์ฌ/Java - Lv.2 (0) | 2024.10.21 |