-
[๋ฐฑ์ค 10974๋ฒ] ์์ ํ์ ๊ธฐ๋ฒData Engineering/์๊ณ ๋ฆฌ์ฆ - Python 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)]