728x90
λ°μν
μμ΄μ΄λ, Nκ°μ μμμμ μνλ κ°μλ₯Ό λ½μ λ, μμκΉμ§ κ³ λ €νλ κ²μ λ§ν©λλ€.
μμ)
[1, 2, 3] λ°°μ΄μμ 2κ°μ μμλ₯Ό μ νν κ²½μ°
=> (1, 2), (1, 3), (2, 3), (2, 1), (2, 3), (3, 1), (3, 2)
μμ κ°μ κ²°κ³Όμ²λΌ (1, 2), (2, 1)μ κ²½μ°λ μλ‘ λ€λ₯Έ κ²μΌλ‘ νλ¨ν©λλ€.
π₯Έ μ¬κ·λ₯Ό ν΅ν μ½λ ꡬν
test = [1, 2, 3]
test_len = len(test)
N = 2 # λ½μ μμ΄μ κ°μ
visit = [0] * test_len # ν΄λΉ indexμ κ°μ μ¬μ©νλμ§ μ¬λΆ
arr = [0] * N # νμ¬ μμ΄μ λ΄μ λ°°μ΄
arr_list = [] # λͺ¨λ μμ΄μ λ΄μ λ°°μ΄
def permutaion(level):
if level >= N: # λ λ²¨μ΄ Nκ³Ό κ°μ κ²½μ°(μ΄λ―Έ Nκ°μ μμλ₯Ό μ νν κ²½μ°)
arr_list.append(arr[:]) # μμ 볡μ¬λ₯Ό ν΅ν΄μ νμ¬ μμ΄μ μΆκ°νλ€.
return
else:
for i in range(test_len):
if visit[i]: continue # μ΄λ―Έ μμ΄λ‘ μ νλμλ€λ©΄ ν΅κ³Ό
visit[i] = 1 # μμ§ μ νλμ§ μμ κ²½μ°μ΄λ―λ‘ μ νμ²λ¦¬
arr[level] = test[i] # μμ΄μ μ ν
permutaion(level + 1) # μ¬κ·λ₯Ό ν΅ν΄ λ°λ³΅
visit[i] = 0 # λ€μ νΈλ¦¬λ‘ λ΄λ €κ°κΈ° μν΄μ μ΄μ μ λ°©λ¬Έμ²λ¦¬λ₯Ό λ‘€λ°±
permutaion(0) # 0κ°μ μμλ₯Ό μ νν κ²½μ°λΆν° μμ
print(arr_list)
# μ€νκ²°κ³Ό
>>> [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]
νμ΄μ¬μ κ²½μ° λ΄μ₯ν¨μλ₯Ό ν΅ν΄μ λ μ½κ² ꡬνν μ μμ΅λλ€.
π₯Έ νμ΄μ¬ λ΄μ₯ν¨μ itertools.permutationμ ν΅ν ꡬν
import itertools
test = [1, 2, 3]
new_per = list(itertools.permutations(test, 2)) # test λ°°μ΄μμ 2κ°μ μμλ₯Ό λ½μμ μμ΄ μμ± ν 리μ€νΈλ‘ λ³ν
print(new_per)
# μ€νκ²°κ³Ό
>>> [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
728x90
λ°μν
'Programming > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python] νλ‘κ·Έλλ¨Έμ€ - 무μΈλ μ¬ν νμ΄μ¬ νμ΄ (0) | 2023.01.28 |
---|---|
[Algorithm] Union - Find (Python ꡬν) (0) | 2022.05.10 |
[Algorithm] νλ‘μ΄λ μμ¬(Floyd Warshall) μκ³ λ¦¬μ¦(ft.νμ΄μ¬) (1) | 2022.05.01 |
[Algoritm] νλ ¬ νμ (Python ꡬν) (0) | 2022.04.23 |
[Algorithm] μ΅λ 곡μ½μ, μ΅μ 곡배μ ꡬνκΈ° (0) | 2022.04.06 |