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

๐Ÿ“š ์ „๊ณต ๊ณต๋ถ€/๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•11

[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 11. ๋™์  ๊ณ„ํš๋ฒ• ๋™์  ๊ณ„ํš๋ฒ• (DP) ์ตœ์ ํ™” ๋ฌธ์ œ, ๋ถ„ํ•  ์ •๋ณต ํ•œ ๋ฌธ์ œ๋ฅผ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์ด๋ฉด์„œ ํฌ๊ธฐ๋งŒ ์ž‘์€ ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์„์ง€ ์ƒ๊ฐํ•ด๋ณธ๋‹ค. ๊ธˆํ™” ๋ชจ์œผ๊ธฐ ๋ฌธ์ œ D[i][j] : (i, j)๊นŒ์ง€ ์˜ค๋Š” ๋™์•ˆ ๋ชจ์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆํ™”์˜ ์ตœ๋Œ“๊ฐ’ D[i][j] = max( D[i-1],[j] , D[i][j-1] ) + map[i][j]; ์ตœ๋Œ€ ๊ณต๋ฐฑ ์ •์‚ฌ๊ฐํ˜• (ํฐ์ƒ‰์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•) mm ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์ด ์žˆ๋‹ค๋ฉด, 4๊ฐœ์˜ (m-1)(m-1) ํฌ๊ธฐ ์ •์‚ฌ๊ฐํ˜•์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐฉ์•ˆํ•œ๋‹ค. D[x][y]๋Š” (x,y)๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๊ผญ์ง€์ ์ธ ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. (x,y)๊ฐ€ ๊ฒ€์€์ƒ‰์ด๋ฉด, D[x][y] = 0 ํฐ์ƒ‰์ด๋ฉด, x==1 && y==1 : D[x][y] = 1 else : D[x][y] = min(.. 2023. 6. 16.
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 10. ๊ณ„์‚ฐ ๊ธฐํ•˜ ๊ณ„์‚ฐ ๊ธฐํ•˜ 2, 3์ฐจ์› ๊ณต๊ฐ„์ƒ์—์„œ ์ , ์„ , ๋„ํ˜• ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ ๊ธฐ๋ณธ ๊ฐ€์ • : 2์ฐจ์› ๊ณต๊ฐ„, ์ •์ˆ˜์ขŒํ‘œ๋งŒ ๊ณ ๋ คํ•จ. ์‹ค์ˆ˜ ์—ฐ์‚ฐ์€ ์ง€์–‘ polygon : ์„ ๋ถ„๋“ค๋กœ ์ด๋ค„์ง„ ๋‹ซํžŒ ๋„ํ˜•. ๋‘ ์„ ๋ถ„์ด ๋งŒ๋‚˜๋Š” ์ ์€ ํ•˜๋‚˜๋ฟ์ด๋‹ค. ๋ชจ๋“  ์ ์„ ์ง€๋‚˜๋Š” ๊ฒฝ๋กœ n๊ฐœ์˜ ์ ์ด ์ฃผ์–ด์ง€๋ฉด, ์ด ์ ๋“ค์„ ๋ชจ๋‘ ์ง€๋‚˜๊ณ  ์‹œ์ž‘์ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜์‹œ์˜ค. ๋‹จ, ๊ต์ฐจํ•˜์ง€ ์•Š๊ฒŒ ํ’€์ด ๋ฐฉ๋ฒ• y์ขŒํ‘œ๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์„ ๊ธฐ์ค€์ ์œผ๋กœ ์žก์Œ. O(n) ์ด ์ ์„ ์ง€๋‚˜๋Š” ์ง์„ ๊ณผ ๋‹ค๋ฅธ ์ ๋“ค์„ ์ž‡๋Š” ์ง์„ ์„ ๋ชจ๋‘ ๊ตฌํ•˜๊ณ , ๊ฐ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ •๋ ฌํ•œ๋‹ค. O(n log n). ๊ทธ๋ฆฌ๊ณ  ์ด ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด ๋จ ๊ฐ์˜ ๊ณ„์‚ฐ : arctan ํ•จ์ˆ˜์™€ ๋น„์Šทํ•œ ์„ฑ์งˆ์„ ๊ฐ€์ง€๊ณ , ๋ถ„๋ชจ๊ฐ€ 0์ธ ๊ฒฝ์šฐ๊ฐ€ ์—†๋„๋ก ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ๊ณ„์‚ฐํ•œ๋‹ค. ์ ๊ณผ ํด๋ฆฌ๊ฑด์˜ ํฌํ•จ ๊ด€๊ณ„ ์ ์˜ ์ขŒ.. 2023. 6. 16.
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 9. Flow Networks Flow Networks ๊ฐ€์ค‘๊ทธ๋ž˜ํ”„ G (๋ชจ๋“  ๊ฐ€์ค‘์น˜๋Š” ์–‘์ˆ˜) ์—์ง€์˜ ๊ฐ€์ค‘์น˜ = c(e) ์‹œ์ž‘์  s์—๋Š” ๋“ค์–ด์˜ค๋Š” ์—์ง€ ์—†๊ณ , ๋„์ฐฉ์  t์—๋Š” ๋‚˜๊ฐ€๋Š” ์—์ง€๊ฐ€ ์—†๋‹ค Flow : ์ด์šฉ๊ฐ€๋Šฅํ•œ ์šฉ๋Ÿ‰์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ฐ„์„ ์„ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๊ฐ’ ๋ชจ๋“  ์—์ง€์— ๋Œ€ํ•ด์„œ, 0 โ‰ค f(e) โ‰ค c(e) flow ๊ฐ’ ( |f| )์€ s์—์„œ ๋‚˜๊ฐ€๋Š” ํ”Œ๋กœ์šฐ ์ด๋Ÿ‰ = t๋กœ ๋“ค์–ด์˜ค๋Š” ํ”Œ๋กœ์šฐ ์ด๋Ÿ‰ ์ตœ๋Œ€ ํ”Œ๋กœ์šฐ = ์ตœ์†Œ cut ์ปท(cut) ์ฃผ์–ด์ง„ ๋…ธ๋“œ V๋ฅผ ๋‘ ์ง‘ํ•ฉ์œผ๋กœ ๋ถ„ํ•  ์ปท X์— ๋Œ€ํ•ด์„œ, f(X)๋Š” X๋ฅผ ์ง€๋‚˜๋Š” flow ์ด๋Ÿ‰ c(X)๋Š” X๋ฅผ ์ง€๋‚˜๋Š” ์—์ง€์˜ c๊ฐ’ ์ด๋Ÿ‰ ์ตœ๋Œ€ ํ”Œ๋กœ์šฐ ๊ตฌํ•˜๊ธฐ Ford-Fulkerson algorithm sโ†’t ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค. BFS ์ง„ํ–‰ ๊ฐ ๊ฒฝ๋กœ์˜ c(e) ์ตœ์†Ÿ๊ฐ’์„ m์ด๋ผ๊ณ  ํ•˜์ž ๊ฐ ๊ฒฝ๋กœ์˜ ์—์ง€๋งˆ๋‹ค, c(e) -=.. 2023. 6. 16.
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 8. ์„œ๋กœ์†Œ์ธ ์ง‘ํ•ฉ์˜ ํ‘œํ˜„ (Disjoint Sets) ์„œ๋กœ์†Œ์ธ ์ง‘ํ•ฉ์˜ ํ‘œํ˜„ (Disjoint Sets) ์„œ๋กœ์†Œ์ธ ์ง‘ํ•ฉ : ์ „์ฒด์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ๋“ค ์ค‘, ๋‘˜์„ ๊ณ ๋ฅด๋ฉด ๊ต์ง‘ํ•ฉ=๊ณต์ง‘ํ•ฉ, ์ „์ฒด ํ•ฉ์ง‘ํ•ฉ=U U์˜ ๋‘ ์›์†Œ๊ฐ€ ๊ฐ™์€ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์›์†Œ์ธ์ง€ ์•„๋‹Œ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ? ์‹ ์žฅํŠธ๋ฆฌ : ๊ทธ๋ž˜ํ”„ G์˜ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š”, E์— ์†ํ•˜๋Š” ์—์ง€๋กœ ๋งŒ๋“  ํŠธ๋ฆฌ ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ : ํŠธ๋ฆฌ์— ์†ํ•œ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์‹ ์žฅ ํŠธ๋ฆฌ. ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ (MST) ๋งŒ๋“ค๊ธฐ Primโ€™s algorithm : ํ˜„์žฌ ์ง‘ํ•ฉ(๋…ธ๋“œ๋“ค)๊ณผ ์—ฐ๊ฒฐ๋œ ์—์ง€ ์ค‘ ๊ฐ€์ค‘์น˜๊ฐ€ ์ตœ์†Œ์ธ ๊ฒƒ์„ MST ์ง‘ํ•ฉ์— ํฌํ•จ์‹œํ‚ด. ๊ตฌํ˜„๋ฒ•์— ๋”ฐ๋ผ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ฐจ์ด๋‚จ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ = ํŠน์ • ์‹œ์ž‘๋…ธ๋“œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•จ. ์œ /๋ฌดํ–ฅ ๊ทธ๋ž˜ํ”„ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ = ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ์ตœ์†Œ๋น„์šฉ์œผ๋กœ ์—ฐ๊ฒฐ / ๋‘ ๋…ธ๋“œ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” ์ตœ.. 2023. 6. 16.
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 7. ์ด๋ถ„ ํƒ์ƒ‰ 1. ํƒ์ƒ‰ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ N๊ฐœ์˜ ์ •์ˆ˜ ๋ฐฐ์—ด A[0], ..., A[N-1]์ด ์žˆ๋‹ค. X๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, A[i] = X๋ผ๋ฉด i๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ find(N, X)๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ด ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ compare(i, val)์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋Š” A[i]=val์ด๋ฉด 0, A[i] val์ด๋ฉด -1์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. N์€ ์ตœ๋Œ€ 100์ด๋‹ค. int find(int sub, int N, int X) { int start = 0, end = N-1, t; while (start 0) start = mid + 1; // ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด start๋ฅผ ๋‹น๊ธฐ๊ธฐ else if (v) end = mid - 1; // ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ํฌ๋ฉด end๋ฅผ ๋‹น๊ธฐ๊ธฐ else return mid; }.. 2023. 4. 19.
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 6. ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ 1. Segment Tree ๋ถ€๋ถ„ํ•ฉ ๋ฌธ์ œ์—์„œ ์‘์šฉ ๊ฐ€๋Šฅ ์ƒ์„ฑ ์ฝ”๋“œ 2. ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ [start, end]์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ๋ฃจํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋‹ค์Œ์„ ์ ๊ฒ€ํ•œ๋‹ค. ๋…ธ๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ๊ฐ„์ด [left, right]๋ผ๋ฉด ๋‹ค์Œ์˜ 4๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ ๊ฒฝ์šฐ๋งˆ๋‹ค ์ฒ˜๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (1) [start, end]์™€ [left, right]๊ฐ€ ๊ฒน์น˜์ง€ ์•Š์Œ -> ํ•  ์ผ์ด ์—†๋‹ค (2) [start, end]๊ฐ€ [left, right]๋ฅผ ํฌํ•จ -> ๋ฏธ๋ฆฌ ๊ตฌํ•ด๋‘” [left, right]์˜ ํ•ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. (3) [start, end]๋ฅผ [left, right]๊ฐ€ ํฌํ•จ -> ๋‘ ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์ •ํ™•ํžˆ ์–ด๋Š ๋…ธ๋“œ๊ฐ€ [left, right]๋ฅผ ํฌํ•จํ•˜๋Š”์ง€ ์ฐพ๋Š”๋‹ค. (4) [start, end]๊ฐ€ [left, right.. 2023. 4. 18.
728x90
๋ฐ˜์‘ํ˜•