๐์๊ณ ๋ฆฌ์ฆ/๐ ๊ฐ๋ ์ ๋ฆฌ
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bnhjoS/btreiQ30Ang/017UrYsVkHK0Z80QN2JD80/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
ํ์ ์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์งํธ๋ฆฌ ๊ธฐ๋ฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํ์ ๋ถ๋ชจ๋ ธ๋์ ์์๋ ธ๋์ ๊ด๊ณ๋ก ์ต๋ ํ, ์ต์ ํ์ผ๋ก ๋๋๋ค. ํค ๊ฐ์ ๋์๊ด๊ณ๋ ๋ถ๋ชจ๋ ธ๋์ ์์๋ ธ๋ ๊ฐ์๋ง ์ฑ๋ฆฝํ๋ฉฐ ํ์ ์ฌ์ด์๋ ์ฑ๋ฆฝํ์ง ์์ ์ ์๋ค. ์ต๋ ํ : ๋ถ๋ชจ๋ ธ๋ ํค ๊ฐ >= ์์๋ ธ๋ ํค ๊ฐ. ๋ฟ๋ฆฌ๋ ธ๋๊ฐ ํญ์ ์ ์ผ ํผ ์ต์ ํ : ๋ถ๋ชจ๋ ธ๋ ํค ๊ฐ
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/lW19i/btrejVcPSPG/4tIhyfPbqyWKT2StKoViUk/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ทธ๋ํ์์ ์ ์ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๊ทธ๋ํ์์ ์ฃผ์ด์ง ์์ ๋ ธ๋์ ๋ํด์ ๋ค๋ฅธ ์ ์ ๊ฐ์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค. ์ฆ, u์์ v๋ก ๊ฐ ๋ ๊ฒฝ๋ก ์ค ๊ฐ์ ๋ค์ ๊ฐ์ค์น ํฉ์ด ์ต์๊ฐ ๋๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ค ํ ์ ์ ์์ ๋ค๋ฅธ ์ ์ ๊น์ง ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๊ฐ ๊ฒฐ์ ๋๋ฉด ๋ฉ์ถ๋ ์์ผ๋ก ์ฌ์ฉํ๋ค. ํ์ด์ฌ์ผ๋ก ๊ตฌํํ๊ธฐ ์์ ๊ฐ์ ๊ทธ๋ํ์ด๊ณ ์์๋ ธ๋๊ฐ 1์ผ ๋, ์์๋ ธ๋ : [(๋์ฐฉ๋ ธ๋, ๊ฐ์ค์น)] ํ์์ผ๋ก ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค๋ฉด ์๋์ ๊ฐ๋ค n = 1 graph = { 1: [(2,2), (3,3)], 2: [(3,4), (4,5)], 3: [(4,6)], 5: [(1,1)] } ๊ฐ ์ ์ ์ ๋ํ ์์๋ ธ๋๋ถํฐ ํด๋น ์ ์ ๊น์ง์ ๊ฐ์ค์น ํฉ์ ์ ์ฅํ p..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bHzVB9/btrd66ubbpb/gLdxdVlVrJYJGtKCYkLrS0/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
DFS def dfs(graph, v, visited): #ํ์ฌ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ visited[v] = True print(v, end=' ') # ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ for i in graph[v]: if not visitied[i]: dfs(graph, i, visited) graph = [ [], [2, 3], [1], [1, 4], [3] ] # ๊ฐ ๋ ธ๋๊ฐ ๋ฐฉ๋ฌธ๋ ์ ๋ณด๋ฅผ ํํ visited = [False] * 9 # ์ ์๋ DFS ํจ์ ํธ์ถ dfs(graph, 1, visitied) BFS from collections import deque def bfs(graph, start, visited): # ํ ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ queue = deq..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/LUUch/btq1MqZhDsR/IDUZVLeh6KkHk2aVrIQ3b0/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
์งํฉ์ set์ ์ฌ์ฉํด ๋ง๋ค ์ ์๋ค. ์งํฉ์ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ ์์๊ฐ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๊ฐ ์์ด ์ธ๋ฑ์ฑ์ ํตํด ๊ฐ์ ์ป๊ธฐ ์ํด์๋ ๋ฆฌ์คํธ๋ ํํ๋ก ๋ณํํด์ผ ํ๋ค. s = set() >>> {} s = set([1,2,3]) >>> {1, 2, 3} s = set("hello") >>> {'e', 'h', 'l', 'o'} ์งํฉ์ ๊ฐ 1๊ฐ ์ถ๊ฐ, ์ฌ๋ฌ๊ฐ ์ถ๊ฐ, ์ ๊ฑฐ ๋ฑ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค. s = set([1, 2, 3]) # ๊ฐ ํ๋ ์ถ๊ฐ s.add(4) >>> {1, 2, 3, 4} # ๊ฐ ์ฌ๋ฌ๊ฐ ์ถ๊ฐ s.update([4, 5]) >>> {1, 2, 3, 4, 5} # ํน์ ๊ฐ ์ ๊ฑฐ s.remove(3) >>> {1, 2} set ์๋ฃํ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ต์งํฉ, ํฉ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/uUUzn/btq1MqEygDz/dITRCHlD0vIiKdgS3K0v60/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
๊น์ด ์ฐ์ ํ์ DFS์ ๋๋น ์ฐ์ ํ์ BFS๋ ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ๋ํ๋ ์ ์ node์ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ edge๋ก ์ด๋ฃจ์ด์ ธ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊น์ด ์ฐ์ ํ์ DFS DFS๋ Depth First Search์ ์ฝ์๋ก, ๋ฃจํธ ๋ ธ๋์์ ์์ํ์ฌ ์๋ ๋ฐฉํฅ์ผ๋ก ํ์ํ๋ค. ์ต๋ํ ๊น์ด ๋ด๋ ค๊ฐ ๋ค ๋์ด์ ๊ฐ ๊ณณ์ด ์์ ๊ฒฝ์ฐ ์์ผ๋ก ์ด๋ํ์ฌ ํ์ํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฃจํธ๋ ธ๋์์ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ค. ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ์ ์ฉํ๋ฉฐ, BFS๋ณด๋ค ์ข ๋ ๊ฐ๋จํ์ง๋ง ๊ฒ์์๋๋ ๋๋ฆฌ๋ค. ์๊ธฐ ์์ ์ ํธ์ถํ๋ ์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ์ ํํ๋ก ๊ตฌํํ๋ฉฐ ์คํ์ ์ด์ฉํ๋ค. ๋๋น ์ฐ์ ํ์ BFS BFS๋ Breadth First Search์ ์ฝ์๋ก, ๋ฃจํธ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/cFMQWb/btq1C1LfgXZ/FHREKhmJPOPgFj1nfyVnKK/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
๋ธ๋ฃจํธํฌ์ค๋ ์ง์น(Brute), ํ(Force)์ด๋ผ๋ ์๋ฏธ์ฒ๋ผ ๋ฌด์ํ๊ฒ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ํด๋ณด๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ปํ๋ฉฐ ์์ ํ์์ด๋ผ๊ณ ๋ ํ๋ค. ๊ฑฐ์ ๋ชจ๋ ๋ฌธ์ ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฃผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์๊ตฌํ๋ ๋ฌธ์ ์์ ์ฌ์ฉ๋๋ค. ๋ธ๋ฃจํธํฌ์ค๋ ์๊ฐ ์ธก๋ฉด์์ ๋งค์ฐ ๋นํจ์จ์ ์ด์ง๋ง ๋ง๋ค๊ธฐ ์ฝ๊ณ 100%์ ํ๋ฅ ๋ก ์ ๋ต์ ๋์ถํ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ํ, ๋ธ๋ฃจํธํฌ์ค์์ ์์ํด ์ข ๋ ๋ฐ์ ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ ์ถ๋ฐ์ ์ด ๋๊ธฐ๋ ํ๋ค. ์๋๋ ๋ธ๋ฃจํธํฌ์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋๊ตฌ์ ์์ด๋ค. ์์ฐจ ํ์ : ์ ํ ๊ตฌ์กฐ๋ฅผ ์ ์ฒด์ ์ผ๋ก ํ์ํ๋ค. ๊น์ด ์ฐ์ ํ์ (DFS, Depth First Search) : ์์ง ๋ฐฉํฅ์ผ๋ก ํ์ํ๋ ๊ธฐ๋ฒ์ผ๋ก ๋ฐฑํธ๋ํน๊ณผ ๊ด๋ จ์ด ๊น๋ค. ๋๋น ์ฐ์ ํ์ (BFS, Breadth First Se..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/AHNRD/btq1E8iwGDT/RRzeO2VaQ8hSE00BJkrbN1/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
itertools๋ฅผ ์ด์ฉํ์ฌ ์์ด๊ณผ ์กฐํฉ์ ๊ตฌํํ๋ฉด ๋์ฑ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. 1. ์์ด : permutations(N, r) N์์ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , r๊ฐ๋ฅผ ๋ฝ์ ์์๋๋ก ๋์ดํ๋ค. ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ฝ์ ๊ฒ ์ค ๊ฐ์ ๊ฐ์ด ๋์ฌ ์ ์๋ค. ๋ฝํ ์์๋๋ก ๋์ดํ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์ค์ํ๋ค. ๊ฐ์ ๊ฐ๋ค์ด ๋ฝํ๋๋ผ๋ ์์๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๊ฒฝ์ฐ์ด๋ค. from itertools import permutations # for ๋ฌธ์ ์ด์ฉํ์ง์๊ณ ๊ตฌํํ๊ธฐ print(list(map(''.join, permutations(['A', 'B', 'C'])))) >>> ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'] # for ๋ฌธ์ ์ด์ฉํ์ฌ ๊ตฌํํ๊ธฐ for i in permut..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/vum7J/btq0XqdDKsZ/QVHdSVGcuJmtUw5o9jpE2k/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
๋์ ๊ณํ๋ฒ, Dynamic Programming์ ์๋ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ์ฌ์ฉํ๋ค. ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ : ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋ ์ ์์ผ๋ฉฐ ์์ ๋ฌธ์ ์ ๋ต์ ๋ชจ์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ์ค๋ณต ๋ถ๋ถ ๊ตฌ์กฐ : ๋์ผํ ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํด๊ฒฐ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ์ต์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํฅ์ ์ ๊ทผ์ด๋ฉฐ ๋ฉ๋ชจ์ด์ ์ด์ ์ ํต์ฌ ๊ธฐ์ ๋ก ์ฌ์ฉํ๋ค. ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)์ด๋, ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋ ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๋กํ์ฌ ์คํ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์ ์ด๋ค. ํผ๋ณด๋์น ์์ด์ด๋ ์ฌ๊ทํจ์์์ ์ ์ฉํ๊ฒ ์ฐ์ด๋ฉฐ ์ ํ์์ ์ฐพ๋๊ฒ ์ค์ํ๋ค. ๋ฌธ์ ์ ์ํ์ ์ธ ์ฑ์ง์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ ํ์์ ์ด์ฉํ์ฌ ์ฌ๊ท์ ์ผ๋ก ์ ์ํด์ผ ํ๋ค...
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/cjIMwe/btq0Vozhrec/LKEqpAlxJknlBjoo6rKyuk/img.png)
![](https://tistory1.daumcdn.net/tistory/4446718/skin/images/no-image.jpg)
ํ(Queue)๋ ์คํ(Stack)๊ณผ ์ ์ฌํ์ง๋ง ๋ฐ๋์ ์ฑ๊ฒฉ์ ์ง๋๋ค. ์คํ์ LIFO(Last In First Out)์ ํํ๋ก ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ์ฒซ ๋ฒ์งธ๋ก ๋์ค๋ ๊ตฌ์กฐ์ด๊ณ ํ๋ FIFO(First In First Out)์ ํํ๋ก ์ฒซ ๋ฒ์งธ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ์ฒซ ๋ฒ์งธ๋ก ๋์ค๋ ๊ตฌ์กฐ์ด๋ค. ์ผ์ฐจ์์ ์ ํ ์๋ฃ๊ตฌ์กฐ์ธ ํ๋ ๊ฐ์ ์ ์ฅํ๋ ์ฐ์ฐ enqueue์ ๊ฐ์ ๊บผ๋ด๋ ์ฐ์ฐ dequeue๊ฐ ์์ด์ผํ๋ค. ํ์ ์ข ๋ฅ๋ก๋ ์ ํ ํ(Queue), ์ํ ํ(Circular Queue), ์ฐ์ ์์ ํ(Priority Queue)๊ฐ ์๋ค. ์ ํ ํ๋ ๋ง๋๋ชจ์์ ํ๋ก ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋น ๊ณต๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ชจ๋ ์๋ฃ๋ฅผ ๊บผ๋ด๊ฑฐ๋ ์๋ฃ๋ฅผ ํ์นธ์ฉ ์์ผ๋ก ์ฎ๊ฒจ์ผํ๋ค๋ ๋จ์ ์ด ์๋ค. ์ ํ ํ์ ๋จ์ ์ ๋ณด์..