๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

python

(5)
[Algorithm] Union - Find (Python ๊ตฌํ˜„) ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ ํŒŒ์ด์ฌ ๊ตฌํ˜„ํ•˜๊ธฐ / union - find by Phython ์œ ๋‹ˆ์˜จ / ํŒŒ์ธ๋“œ๋Š” ํ˜„์žฌ ๋…ธ๋“œ๋“ค์ด ๊ฐ™์€ ๊ทธ๋ฃน์— ์†ํ•ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๊ฐ™์€ ๊ทธ๋ฃน์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ณ‘ํ•ฉ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. find ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ par = [ -1 for i in range(N + 1) ] # ๋ฃจํŠธ๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด def find(x): # ๋ฃจํŠธ๋ฅผ ์ฐพ์•„์ฃผ๋Š” ํ•จ์ˆ˜ if par[x] ์•„์ง ์—ฐ๊ฒฐ๋œ ์ ์ด ์—†์Œ par[x] = find(par[x]) # ์ž์‹ ์˜ ๋ถ€๋ชจ๋ฅผ ๋ถ€๋ชจ->๋ถ€๋ชจ ๋ฅผ ์žฌ๊ท€๋กœ ๋ฃจํŠธ ๋ถ€๋ชจ๋ฅผ ์ฐพ์Œ return par[x] # ๋ฃจํŠธ ๋ถ€๋ชจ๋ฅผ ๋ฆฌํ„ด par ์ด๋ผ๋Š” ๋ฐฐ์—ด์—๋Š” ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๋‹ด์•„ ๋†“์Šต๋‹ˆ๋‹ค. par ๋ฐฐ์—ด์˜ index๋Š” ๊ฐ..
[Algorithm] ์žฌ๊ท€๋ฅผ ํ†ตํ•œ ์ˆœ์—ด(permutation) ๊ตฌํ˜„(+ python ๋‚ด์žฅ ํ•จ์ˆ˜ ์ด์šฉ) ์ˆœ์—ด์ด๋ž€, N๊ฐœ์˜ ์›์†Œ์—์„œ ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๋ฝ‘์„ ๋•Œ, ์ˆœ์„œ๊นŒ์ง€ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ) [1, 2, 3] ๋ฐฐ์—ด์—์„œ 2๊ฐœ์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•  ๊ฒฝ์šฐ => (1, 2), (1, 3), (2, 3), (2, 1), (2, 3), (3, 1), (3, 2) ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ (1, 2), (2, 1)์˜ ๊ฒฝ์šฐ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฅธ ์žฌ๊ท€๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๊ตฌํ˜„ test = [1, 2, 3] test_len = len(test) N = 2 # ๋ฝ‘์„ ์ˆœ์—ด์˜ ๊ฐœ์ˆ˜ visit = [0] * test_len # ํ•ด๋‹น index์˜ ๊ฐ’์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€ arr = [0] * N # ํ˜„์žฌ ์ˆœ์—ด์„ ๋‹ด์„ ๋ฐฐ์—ด arr_list = [] # ๋ชจ๋“  ์ˆœ์—ด์„ ๋‹ด์„ ๋ฐฐ์—ด def permutaion(level): if level >=..
[Algorithm] ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ(Floyd Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜(ft.ํŒŒ์ด์ฌ) ๐Ÿšฉ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒŒ์ด์ฌ ๊ตฌํ˜„ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์€ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์ด ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ˜น์€ ์ตœ์†Œ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์€ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋“ค๊นŒ์ง€์˜ ์ตœ์†Œ ๊ฑฐ๋ฆฌ(ํ˜น์€ ์ตœ์†Œ๋น„์šฉ)์„ ๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— "์–ด๋”˜๊ฐ€๋ฅผ ๊ฒฝ์œ ํ•œ๋‹ค."๋ผ๋Š” ์กฐ๊ฑด์ด ์ฃผ์–ด์งˆ ๋•Œ, ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•˜๊ธฐ ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ถœ๋ฐœ์ (s), ๋„์ฐฉ์ง€์ (e), ๊ฒฝ์œ ์ง€(p)์— ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^3)์œผ๋กœ ํฐ ํŽธ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋…ธ๋“œ(N)์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ณ ๋ คํ•ด ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด ์‚ฌ์šฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ์ง€ ๊ณ ๋ คํ•ด๋ด์•ผํ•ฉ๋‹ˆ๋‹ค. โœ๏ธ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„ ๊ทธ๋ฆผ์˜ ๊ฒฝ์šฐ๋Š” ์ถœ๋ฐœ์ง€์ ์ด 1๋ฒˆ ๋…ธ๋“œ, ๋„์ฐฉ์ง€์ ์ด 4๋ฒˆ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ ์ž…๋‹ˆ๋‹ค. 1 -> 4๋กœ ๊ฐ€๋Š”๊ฒŒ ๊ฒฝ์œ ..
[Algorithm] ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ GCD(Greatest Common Divisor) ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• ์‚ฌ์šฉ def gcd(a, b): while b: a, b = b, a % b return a a = b x q + r ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, GCD(a, b) = GCD(b, r)๋ฅผ ๋งŒ์กฑํ•œ๋‹ค. ๊ฐ„๋‹จ ์ฆ๋ช…: ์ˆ˜ํ•™์ ์œผ๋กœ ์ฆ๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ์ดํ•ด๋ฅผ ์œ„ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. b = r x m + n์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ, n์ด 0์ด๋ผ๋ฉด b = rm์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ์ฆ‰, b์™€ r์˜ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ GCD(b, r) = m์ด ๋œ๋‹ค. a = bq + r = rmq + r = r(mq + 1) ์ด๋ฏ€๋กœ GCD(a, b) = r ์ด๋‹ค. => GCD(a, b) = GCD(b, r) = GCD(r, 0) = r LCM(Lo..
์ƒ์•  ์ฒซ ๋ฐฐํฌ ํ”„๋กœ๊ทธ๋žจ - ์žฌํƒ๊ทผ๋ฌด ๋„์šฐ๋ฏธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ฒ˜์Œ ํฅ๋ฏธ๋ฅผ ๋Š๊ปด๋ณธ ๊ฒƒ์ด ํ•™๋ถ€์‹œ์ ˆ ์ž๋™ํ™” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฒฝํ—˜ํ•œ ํ›„์˜€๋‹ค. ํŒŒ์ด์ฌ ์ž์ฒด๊ฐ€ ํŽธ๋ฆฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ์ž๋™ํ™” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ธฐ์— ์ฐธ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ์•ฝ๊ฐ„์˜ ๊ณ„๊ธฐ๊ฐ€ ์ƒ๊ฒจ์„œ ๊ฐ„๋‹จํ•˜๋ฉด์„œ ์žฌ๋ฐŒ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์–ด์„œ "์žฌํƒ๊ทผ๋ฌด ๋„์šฐ๋ฏธ"๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ดค๋‹ค. โ–ถ ๋ฌด์Šจ ํ”„๋กœ๊ทธ๋žจ์ผ๊นŒ? ์‚ฌ์‹ค ๊ฑฐ์ฐฝํ•œ ์ด๋ฆ„์— ๋น„ํ•ด์„œ ์ƒ๋‹นํžˆ ํ—ˆ์ €..ใ…‚? ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์€ ์—†๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๋งˆ์šฐ์Šค๋ฅผ ์ž๋™์œผ๋กœ ์›€์ง์—ฌ์„œ ํ™”๋ฉด ๊บผ์ง์„ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค. โ–ถ ์™œ ๋งŒ๋“ค์—ˆ์„๊นŒ? ๋ณ„๋กœ ์“ธ๋ชจ์—†์–ด ๋ณด์ด๋Š” ์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“  ๊ณ„๊ธฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ฝ”๋กœ๋‚˜๋กœ ์ธํ•ด์„œ ์นœ๋ˆ„๋‚˜๊ฐ€ ์žฌํƒ๊ทผ๋ฌด๋ฅผ ํ•˜๋Š” ์‹œ๊ฐ„์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์•„์กŒ๋‹ค. ์‚ฌ๋‚ด์˜ ์›๊ฒฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•˜๋Š”๋ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉ์ž ์ž…๋ ฅ(ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค ์‚ฌ์šฉ)..

728x90