728x90
728x90
์ผ๋ฐ์ ์ธ ์์ด๊ณผ ์กฐํฉ (์ ์์ค)
def permute(arr):
result = [arr[:]]
c = [0] * len(arr)
i = 0
while i < len(arr):
if c[i] < i:
if i % 2 == 0:
arr[0], arr[i] = arr[i], arr[0]
else:
arr[c[i]], arr[i] = arr[i], arr[c[i]]
result.append(arr[:])
c[i] += 1
i = 0
else:
c[i] = 0
i += 1
return result
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ ์์ค ๋ฐฉ์์ผ๋ก C/C++๋ฑ ์์ ์์ฑํ๋ ๋ฐฉ์์ด๋ค. (STL์ ์ธ)
ํ์ด์ฌ์์๋ ๋ณต์กํ ์ฝ๋๋ฅผ ์ ์ํ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค.
์์ด๊ณผ ์กฐํฉ in Python
import itertools
pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3๊ฐ์ ์์๋ก ์์ด ๋ง๋ค๊ธฐ
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2๊ฐ์ ์์๋ก ์์ด ๋ง๋ค๊ธฐ
A, B, C
3๊ฐ์ ์์๋ก ์์ด์ ๋ง๋ค๊ฒ ๋๋ฉด
'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'
3๊ฐ์ ์์๋ก ์ด๋ฃจ์ด์ง ์กฐํฉ์ด ์์ฑ๋๋ค.
๋ฒ์ธ๋ก permutations์ ๋๋ฒ์งธ ์ธ์์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ณด๋ค ์์ ์๋ฅผ ์ง์ ํ์ฌ ๋ค๋ฅธ ์กฐํฉ์ ๋ง๋ค ์ ์๋ค.
์๋ฅผ ๋ค์ด, 2๋ฅผ ๋ฃ์ผ๋ฉด
'AB', 'AC', 'BA', 'BC', 'CA', 'CB'
2๊ฐ์ ์์๋ก ์ด๋ฃจ์ด์ง ์กฐํฉ์ด ์์ฑ๋๋ค.
728x90
๋ฐ์ํ