๐Ÿ”ฌ Explore/ํŒŒ์ด์ฌ

[ํŒŒ์ด์ฌ] ์ˆœ์—ด(Permutations) ๊ณผ ์กฐํ•ฉ(Combinations)

devCloud 2024. 11. 6. 11:24
728x90

permutations (์ˆœ์—ด)

ํŒŒ์ด์ฌ์˜ permutations ํ•จ์ˆ˜๋Š” ์ˆœ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ, ์ฃผ์–ด์ง„ ์ˆœ์„œ๋กœ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค. itertools ๋ชจ๋“ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ ์ „์— ์ด ๋ชจ๋“ˆ์„ ์ž„ํฌํŠธํ•ด์•ผ ํ•œ๋‹ค.

 

๊ธฐ๋ณธ ๊ตฌ๋ฌธ

from itertools import permutations

permutations(iterable, r)
  • iterable : ์ˆœ์—ด์„ ์ƒ์„ฑํ•  ๋Œ€์ƒ (๋ฆฌ์ŠคํŠธ, ๋ฌธ์ž์—ด ๋“ฑ).
  • r : ์ˆœ์—ด์˜ ๊ธธ์ด (๋ฝ‘์„ ๊ฐœ์ˆ˜). r์„ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ len(iterable)๋กœ ์„ค์ •๋œ๋‹ค.

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

1๏ธโƒฃ ๊ธฐ๋ณธ ์‚ฌ์šฉ

from itertools import permutations

items = ['a', 'b', 'c']
perm = permutations(items, 2)
print(list(perm))
์ถœ๋ ฅ ๊ฒฐ๊ณผ
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
  • items์—์„œ 2๊ฐœ์”ฉ ์ˆœ์„œ ์žˆ๊ฒŒ ๋ฝ‘๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

2๏ธโƒฃ ์ „์ฒด ๊ธธ์ด์˜ ์ˆœ์—ด ์ƒ์„ฑ

r ๊ฐ’์„ ์ƒ๋žตํ•˜๋ฉด len(iterable)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๊ธธ์ด์˜ ์ˆœ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

perm = permutations(items)
print(list(perm))

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

 

 

3๏ธโƒฃ ๋ฌธ์ž์—ด ์ˆœ์—ด ์ƒ์„ฑ

๋ฌธ์ž์—ด์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ๋ฌธ์ž ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

perm = permutations('ABC', 2)
print(list(perm))

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
 
 
 

4๏ธโƒฃ ์ค‘์ฒฉ for๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

permutations์˜ ๊ฒฐ๊ณผ๋ฅผ ์ค‘์ฒฉ๋œ for๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

items = [1, 2, 3]
for perm in permutations(items, 2):
    print(perm)

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
 

์š”์•ฝ

  • permutations๋Š” ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํŠน์ • ๊ธธ์ด๋งŒํผ ์š”์†Œ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ์ˆœ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” ํŠœํ”Œ๋กœ ๋ฐ˜ํ™˜๋˜๋ฉฐ, list()๋กœ ๋ณ€ํ™˜ํ•ด ๋ชจ๋“  ์ˆœ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆœ์—ด์˜ ๊ธธ์ด r์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ๋žต ์‹œ ์ „์ฒด ๊ธธ์ด๋กœ ์ˆœ์—ด์ด ์ƒ์„ฑ๋œ๋‹ค.
  • itertools ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์™€์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

combinations (์กฐํ•ฉ)

ํŒŒ์ด์ฌ์˜ combinations๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์ฃผ์–ด์ง„ ๊ธธ์ด๋งŒํผ ์›์†Œ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. itertools ๋ชจ๋“ˆ์— ํฌํ•จ๋˜์–ด ์žˆ์–ด, ์ด ๋ชจ๋“ˆ์„ ๋จผ์ € ์ž„ํฌํŠธํ•ด์•ผ ํ•œ๋‹ค.

 

๊ธฐ๋ณธ ๊ตฌ๋ฌธ

from itertools import combinations

combinations(iterable, r)
  • iterable : ์กฐํ•ฉ์„ ์ƒ์„ฑํ•  ๋Œ€์ƒ(์˜ˆ: ๋ฆฌ์ŠคํŠธ, ๋ฌธ์ž์—ด ๋“ฑ).
  • r : ์กฐํ•ฉ์˜ ๊ธธ์ด (๋ฝ‘์„ ๊ฐœ์ˆ˜).

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

1๏ธโƒฃ ๊ธฐ๋ณธ ์‚ฌ์šฉ

from itertools import combinations

items = ['a', 'b', 'c']
combi = combinations(items, 2)
print(list(combi))

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

[('a', 'b'), ('a', 'c'), ('b', 'c')]
  • 'a', 'b', 'c' ์ค‘์—์„œ 2๊ฐœ์”ฉ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

2๏ธโƒฃ ๋ฌธ์ž์—ด์—์„œ ์กฐํ•ฉ ์ƒ์„ฑ

๋ฌธ์ž์—ด๋„ iterable์ด๊ธฐ ๋•Œ๋ฌธ์—, ์กฐํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

combi = combinations('ABCD', 2)
print(list(combi))

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

 

 

3๏ธโƒฃ ๋ชจ๋“  ์กฐํ•ฉ ์ƒ์„ฑ

์ „์ฒด ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด, ๊ธธ์ด r์„ 1๋ถ€ํ„ฐ len(iterable)๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

items = ['x', 'y', 'z']
all_combinations = [list(combinations(items, r)) for r in range(1, len(items) + 1)]
print(all_combinations)

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

[[('x',), ('y',), ('z',)], [('x', 'y'), ('x', 'z'), ('y', 'z')], [('x', 'y', 'z')]]

 

 

4๏ธโƒฃ ์ด์ค‘ for๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

combinations๋ฅผ ์ด์ค‘ for๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜์—ฌ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

items = [1, 2, 3]
for combi in combinations(items, 2):
    print(combi)

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

(1, 2)
(1, 3)
(2, 3)

 

์š”์•ฝ

  • combinations๋Š” ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ๊ธธ์ด๋งŒํผ ์š”์†Œ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋˜๋ฉฐ, list()๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ „์ฒด ์กฐํ•ฉ์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์กฐํ•ฉ์˜ ๊ธธ์ด r์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ, itertools ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์™€์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Permutations ์™€ Combinations ์˜ ์ฐจ์ด

permutations์™€ combinations์˜ ์ฃผ์š” ์ฐจ์ด๋Š” ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ด๋‹ค.

  • permutations
    • ์ˆœ์„œ๋ฅผ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค. ๊ฐ™์€ ์›์†Œ๋ผ๋„ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ('a', 'b')์™€ ('b', 'a')๋Š” ๋‹ค๋ฅธ ์ˆœ์—ด๋กœ ๋ณธ๋‹ค.
  • combinations
    • ์ˆœ์„œ๋ฅผ ์ค‘์š”ํ•˜์ง€ ์•Š๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค. ๊ฐ™์€ ์›์†Œ๊ฐ€ ๋‹ค๋ฅธ ์ˆœ์„œ๋กœ ๋ฐฐ์น˜๋˜๋”๋ผ๋„ ๊ฐ™์€ ์กฐํ•ฉ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ('a', 'b')์™€ ('b', 'a')๋Š” ๊ฐ™์€ ์กฐํ•ฉ์œผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

์˜ˆ์‹œ

  • permutations(['a', 'b'], 2) → [('a', 'b'), ('b', 'a')]
  • combinations(['a', 'b'], 2) → [('a', 'b')]

 

๐Ÿ“Œ ์ •๋ฆฌ

permutations๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , combinations๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

728x90