๐Ÿ“˜ Programming/Python

[Python3] ์ˆœ์—ด๊ณผ ์กฐํ•ฉ (itertools permutations ์‚ฌ์šฉ๋ฒ•)

ํ•œ์ฝ”๋”ฉ 2020. 10. 4. 17:16
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
๋ฐ˜์‘ํ˜•