Data Engineering/์•Œ๊ณ ๋ฆฌ์ฆ˜ - Python

[๋ฐฑ์ค€ 10974๋ฒˆ] ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ•

ddoddo201 2021. 6. 28. 14:36

 

 

 

๐Ÿ“์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ•์ด๋ž€?

: (์ปดํ“จํ„ฐ์˜ ๊ณ„์‚ฐ์„ ์ด์šฉํ•˜์—ฌ) ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด์„œ ์ •๋‹ต์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๐Ÿ“์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

: ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์ ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๐Ÿ“์™„์ „ ํƒ์ƒ‰์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” 5๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

โ—พ Brute-Force

โ—พ ๋น„ํŠธ๋งˆ์Šคํฌ

โ—พ ์žฌ๊ท€ ํ•จ์ˆ˜

โ—พ ์ˆœ์—ด

โ—พ BFS/ DFS

 

 

๐Ÿ“๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.

1โƒฃ Brute-Force

: ๋‹จ์ˆœํ•˜๊ฒŒ for, if ๋ฌธ์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.

 

2โƒฃ ๋น„ํŠธ๋งˆ์Šคํฌ

: 2์ง„์ˆ˜ ํ‘œํ˜„ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. (AND, OR, XOR, SHIFT, NOT)

 

3โƒฃ ์žฌ๊ท€ ํ•จ์ˆ˜

: ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•œ๋‹ค.

 

4โƒฃ ์ˆœ์—ด

: ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ์—์„œ r๊ฐœ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•œ๋‹ค.

ex) [1,2,3] → [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]

 

5โƒฃ BFS/ DFS

 

 

 

 

 

 

์‰ฌ์šด ์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์–ด๋ณด์ž.

 

[๋ฐฑ์ค€ 10974๋ฒˆ - ๋ชจ๋“  ์ˆœ์—ด]

 

https://www.acmicpc.net/problem/10974

 

10974๋ฒˆ: ๋ชจ๋“  ์ˆœ์—ด

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

 

(์ •๋‹ต - ๋‹ค๋ฅธ ์ •๋‹ต ์ฐธ๊ณ )

import itertools
n=int(input())
arr=[i for i in range(1,n+1)]

for nums in list(itertools.permutations(arr)):
    for n in nums:
        print(n,end=' ')
    print()

 

 

 

 

<๊ณต๋ถ€>

 

โ—พ itertools ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ํšจ์œจ์ ์ธ ๋ฐ˜๋ณต์„ ์œ„ํ•œ ํ•จ์ˆ˜

๐Ÿ”ธ itertools.permutations(p,r): ๋ชจ๋“  ์ˆ˜์˜ ์กฐํ•ฉ = ์ˆœ์—ด

๐Ÿ”ธ itertools.combinations(p,r): ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์กฐํ•ฉ

 

 

(์ˆœ์—ด)

โ—พ permutations(p) : p์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ˆ˜์˜ ์กฐํ•ฉ (=์ˆœ์—ด)

โ—พ permutations(p,r) : (p์— ์กด์žฌํ•˜๋Š”) r๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋“  ์ˆ˜์˜ ์กฐํ•ฉ (=์ˆœ์—ด)

import itertools
arr=[1,2,3]

print(list(itertools.permutations(arr))) 
#[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

print(list(itertools.permutations(arr,2))) 
#[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

 

(์กฐํ•ฉ)

โ—พ combinations(p,r) : (p์— ์กด์žฌํ•˜๋Š”) r๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์กฐํ•ฉ

*r ๊ฐ’์„ ๋ฐ˜๋“œ์‹œ ์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

* ์กฐํ•ฉ์—์„œ๋Š” (1,2,3), (2,1,3), (3,1,2) ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค.

import itertools
arr=[1,2,3]
print(list(itertools.combinations(arr,3))) # [(1, 2, 3)]
print(list(itertools.combinations(arr,2))) # [(1, 2), (1, 3), (2, 3)]

 

 

๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์•„๋ž˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์ž.

https://docs.python.org/ko/3/library/itertools.html

 

itertools — ํšจ์œจ์ ์ธ ๋ฃจํ•‘์„ ์œ„ํ•œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜ — Python 3.9.5 ๋ฌธ์„œ

 

docs.python.org

 

 

โ—พ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑํ•  ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธด for๋ฌธ ์ƒ์„ฑํ•˜๋Š” ๋ฒ„๋ฆ‡ ๊ณ ์น˜๊ธฐ!

arr=[i for i in range(1,n+1)]