๋ฌธ์ ๋งํฌ ์ฐ์ฃผ์ ์ด $i$๋ฒ์งธ๋ก ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ $k{i}$๋ผ๊ณ ํ์ ๋, ์์ด์ ์ฒซ์งธ ํญ๊ณผ ๋ง์ง๋ง ํญ์ด 1์ด๊ณ $k{i+1} = k{i} - 1$ ๋๋ $k{i}$ ๋๋ $k_{i} + 1$๊ฐ ๋๋ ์ํฉ์์ ์ต์ ์ด๋ ํ์๋ฅผ ๋ฌป๋ ๋ฌธ์ ์ด๋ค! ๋ฌธ์ ๋ฅผ ํธ๋ ํต์ฌ ์ฒซ ๋ฒ์งธ๋ ๋ฐ๋ก $k{i}$์ ์ต๋๊ฐ์ ๋ํด ์๊ฐํ๋ ๊ฒ์ด๋ค. ์์ด $k{i}$๋ ์ด์ํ๋ ํญ๊ณผ์ ์ฐจ์ด๊ฐ ํญ์ $0$ ๋๋ $1$์ด์ด์ผ ํ๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์ฑ๋ฆฝํ๋ค. > $k_{i}$์ ์ต๋๊ฐ์ด $n$์ด๋ผ๋ฉด, ์ฐ์ฃผ์ ์ ์ ์ด๋ $1 + 2 + \cdots + n + (n-1) + (n-2) + \cdots + 1 = n^2$๋งํผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ํ์ด์ผ ํ๋ค! ๋ฐ๋ผ์, ๊ฐ๋ฅํ $n$์ ์ต๋๊ฐ์ $\sqrt{y - x}$ ์ ์ ์ ๋ถ๋ถ์ด ๋ ๊ฒ์ด๋ค. ํํธ, ์์ ๊ฐ์ด ์ฐ์ฃผ์ ์ด $(2n - 1)$๋ฒ์ ์์ง์์ผ๋ก $n^2$๋งํผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ํ
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ์ ์ ๋ ํน์ด๋ผ๋ ๋ถ๋ฅ๊ฐ ์์ด, ๊ถ๊ธํด์ ํ์ด ๋ณธ ๋ฌธ์ ์๋ค! ์ฒ์์๋ ์ ๋ ํน๋ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ์ธ ์ค ์์๋๋ฐ, ๋ด๊ฐ ์๋ ์๋ฏธ๊ฐ ์๋๋ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ ค์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ ๋ง '์์์ ์๊ฐํด์ ํ์ด์ผ ํ๋ ๋ฌธ์ '๋ฅผ ์ผ์ปซ๋ ๋ง์ด์๋ค. ๋ฌธ์ ๋ 1๋ถํฐ $n$๊น์ง์ ์์ด์ ๋ ๋ฒ ๋ค์ง์์ ๋, ์ด๋ฅผ ์์๋ณต๊ตฌ์ํค๋ ค๋ฉด ์ด๋ป๊ฒ ๋ค์ง์ด์ผ ํ๋์ง๋ฅผ ๋ฌป๋๋ค. ์๋ ค์ง ๊ณต์์ด๋ ๋ฐฉ๋ฒ์ ์ ์ฉํ ์ ์์ด์, ์ฐ์ ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ์๋ค! ๊ทธ๋ฌ๋ค ๋ณด๋, ์์ด์ ๋ค์ง์ผ๋ฉด ๋ค์งํ ๊ตฌ๊ฐ ๋ด๋ถ์ ์๋ ์ซ์๋ค์ ์ธ์ ํ ์ซ์์์ ์ฐจ์ด๊ฐ 1 ๋๋ -1์ด์ง๋ง ๊ทธ ๊ฒฝ๊ณ์ ์๋ ์ซ์๋ ์ธ์ ํ ์ซ์์์ ์ฐจ์ด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ด ์ ๋ค์ ํ์ํ๊ธฐ๋ก ํ์๋ค! ๊ทธ๋ฐ๋ฐ ์ฒ์
๋ฌธ์ ๋งํฌ ์์ ์ ์ฑ ์์ ์ผํ ๋ณธ ๊ฒ ๊ฐ์ ๋ฌธ์ ๋ผ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์๋ค! ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ฃผ์ด์ง ํ์คํ ๊ทธ๋จ์ ๋ฐ์ผ๋ก ๋๋ ํ, ์๋์ 3๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์ด์ ๋ถํ ์ ๋ณต์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ๋๋ค. > 1. ์ ๋ต์ด ๋๋ ์ง์ฌ๊ฐํ์ด ์ผ์ชฝ ๋ถ๋ถ์๋ง ์๋ค. > 2. ์ ๋ต์ด ๋๋ ์ง์ฌ๊ฐํ์ด ์ค๋ฅธ์ชฝ ๋ถ๋ถ์๋ง ์๋ค. > 3. ์ ๋ต์ด ๋๋ ์ง์ฌ๊ฐํ์ด ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ๊ฑธ์ณ ์๋ค. $i$๋ฒ ์ง์ฌ๊ฐํ๋ถํฐ $j$๋ฒ ์ง์ฌ๊ฐํ๊น์ง ๊ณ ๋ คํ ๋ต์ $solve(i, j)$๋ผ ํ๋ฉด, $mid = \lfloor\frac{i + j}{2}\rfloor$๋ผ๊ณ ํ์์ ๋, 1๋ฒ๊ณผ 2๋ฒ์ ๊ฒฝ์ฐ๋ $solve(i, mid)$์ $s
๋ฌธ์ ๋งํฌ ์์ด๋์ด ์์ฒด๋, ๊ทธ๋ํ์ SCC(Strongly connected components)๋ฅผ ์ฐพ์์ ์ ์ฒด ๊ฐ์๋ฅผ ์ ์ฅํ๊ณ ๊ฐ๊ฐ์ SCC๋ฅผ ์ ์ ์ผ๋ก ๊ฐ๋ ์๋ก์ด ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ ํด๊ฒฐํ๋ฉด ๋๋ ๋ฌธ์ ์ผ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค! SCC ์ฐพ๊ธฐ ๊ทธ๋ํ์ SCC๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ด ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋๋ฐ, ๋์ค์ ํ ํ๋ฆฟ์ผ๋ก ๋ง๋ค์ด ๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค! ์์ด๋์ด๋ ํ๋์ ์ ์ ์ ๋ํด DFS๋ฅผ ํ๋, ๋ฐฉ๋ฌธํ ์์๋ฅผ ์ ์ฅํ๊ณ ์คํ์ ๋ฃ์ผ๋ฉด์, ๋ฐฉ๋ฌธํ ์ ์ ์ด ์ด๋ฏธ ๋ฐฉ๋ฌธํ์ผ๋ SCC๋ก ๋ถ๋ฅ๋์ง ์์ ์ ์ ์ด๋ฉด cycle์ ๋ฐ๊ฒฌํ ๊ฒ์ด๋ฏ๋ก cycle์์ ์ต์ด๋ก ๋ฐฉ๋ฌธ
๋ฌธ์ ๋งํฌ LIS(Longest Increasing Subsequence) ๋ฌธ์ ๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ์ ๋ช ํ ๋ฌธ์ ๋ค ์ค ํ๋๋ก, ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํ๋ค๋ฉด $dp(i)$๋ฅผ $i$๋ฒ์งธ ์์๋ฅผ ๋ง์ง๋ง ๊ฐ์ผ๋ก ๊ฐ๋ LIS์ ๊ธธ์ด๋ก ์ ์ํ ๋ค $dp(n)$์ ๊ตฌํด์ฃผ๋ฉด ๋๋๋ฐ, ์ด๋ $dp(i)$๋ฅผ ๊ตฌํ๊ธฐ ์ํด $i$๋ฒ์งธ ์์ ์์ ์๋ ๋ฐฐ์ด์ ์์์ $dp(j)$ ๊ฐ์ ์ค์บํด์ผ ํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ $O(n^2)$๊ฐ ๋๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ๋ ์์ด์ ์์ ๊ฐ์๊ฐ ์ต๋ 1,000,000๊ฐ์ด๋ฏ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์๋ฐ์ ์๋ค. ์ด ๋ฌธ์ ๋ฅผ $O(n log n)$์ ์๊ฐ ๋ณต์ก๋๋ก ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๋๋ฐ, ๋ฐ๋ก ์์ด์ ์๋ ์๋ค์ ๊ฐ๊ฐ ๊ฒ์ฌํ๋ฉด์, LIS๊ฐ ๋ ์ ์๋ ํ๋ณด ์์ด์ ์ ์ฅํ๋ ๋ฐฐ์ด์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ฃผ์ด์ง ๋ฐฐ์ด์ $A$, LIS๊ฐ ๋
๋ฌธ์ ๋งํฌ ๋์ ๋์ง๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๊ณ , ๋์ ์ด ์๋ฉด์ด ๋์ฌ ํ๋ฅ ์ ๋ํด ๋ฌผ์ด๋ณด๋ ๋ฌธ์ ๋ผ์ ๋ฒ ์ด์ฆ ์ ๋ฆฌ๋ฅผ ํ์ฉํ ์ ์์ ๊ฒ ๊ฐ์๋ค! ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฒ ์ด์ฆ ์ ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ํ๋ฅ ๋ถํฌ๋ฅผ ๊ตฌํ๊ณ ์ ๋ถ์ ํตํด ๊ณ์ฐํ๋ ๊ฒ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋์ ์คํจํ์ง๋ง, ๊ทธ๋๋ ๊ณ์ฐ ๊ณผ์ ์ด ๋ง๊ณ ์ค๋๋ง์ ๋ฒ ์ด์ฆ ์ ๋ฆฌ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค์ผ๋๊น ์ด๊ฒ๋ ์จ ๋ด์ผ๊ฒ ๋ค! ๋ฒ ์ด์ฆ ์ ๋ฆฌ๋ฅผ ์ด์ฉํด์ ํ๋ฅ ๋ถํฌ ๊ตฌํ๊ธฐ(์๊ฐ ์ด๊ณผ) ๋ฒ ์ด์ฆ ์ ๋ฆฌ์ ๋ชจ์ต์ธ๋ฐ, ์ฌ๊ธฐ์ ๋์ ์ ํ๋ฅ $p$์ $q$๋ ์ฐ์ํ๋ฅ ๋ณ์์ด๋ฏ๋ก ํ๋ฅ ๋ฐ๋ํจ์์ ๋ํด์ ์ฐ๋ฉด ์๋์ ๊ฐ๋ค! ๋จผ์ ์ฌ๊ฑด $A$๋ฅผ ๋์ ์ $n1$๋ฒ ๋์ง ๋ ์๋ฉด์ด $m1$๋ฒ ๋์จ ์ฌ๊ฑด์ผ๋ก ์ ์ํ๊ณ , ๋์ 1์ ์ฌ์ ํ๋ฅ ๋ถํฌ๋
๋ฌธ์ ๋งํฌ ๊ฐ๋จํ DP ๋ฌธ์ ๋ก, ์ด๋ค ์์ด์ด ์ฃผ์ด์ก์ ๋ $i$๋ฒ์งธ๋ถํฐ $j$๋ฒ์งธ๊น์ง์ ๋ถ๋ถ ์์ด์ด ํฐ๋ฆฐ๋๋กฌ์ธ์ง ์ฐพ๋ ๊ฒ์ธ๋ฐ ๋ฌธ์ ๊ฐ ์ฌ๋ฌ ๊ฐ ์ฃผ์ด์ง๋ค! ๋ถ๋ถ ์์ด์ ํฌ๊ธฐ๊ฐ 1 ์ดํ์ผ ๋๋ ํญ์ ํฐ๋ฆฐ๋๋กฌ์ด ๋๊ณ , ํฐ ์ ๋ ฅ์ ๋ํด์๋ $i$๋ฅผ ํ๋ ๋๋ฆฌ๊ณ $j$๋ฅผ ํ๋ ์ค์ด๋ฉด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
๋ฌธ์ ๋งํฌ DP๋ง ์ฐ๋ฉด ๋๋ ๋ฌธ์ ์ธ๋ฐ, ๋์ด๋๊ฐ ํ๋ํฐ๋ V๋ก ๋์๊ฒ๋ ์ด๋ ค์ด ํธ์ธ ๋ฌธ์ ์๋ค! ๋น์ฐํ ์ ๋๊ฒ ์ง๋ง, ์์ ํ์์ผ๋ก ํผ๋ค๋ฉด ๊ฒฐ๊ตญ ๊ฐ๊ฐ์ ์ฌ๊ฑด์ ๋ํด 1๋ฒ ๊ฒฝ์ฐฐ์ฐจ๊ฐ ์ถ๋ํ๋ฉด ๋๋์ง, 2๋ฒ ๊ฒฝ์ฐฐ์ฐจ๊ฐ ์ถ๋ํ๋ฉด ๋๋์ง๋ฅผ ํ๋จํ๋ฉด ๋๋๊น ์ต๋ $2^{1000}$๊ฐ์ง์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ค๋ณต๋ ๊ณ์ฐ์ด ์ฌ๋ฌ ๋ฒ ๋์ค๋ฉด DP๋ฅผ ์ ์ฉํ๋ฉด ๋๋๋ฐ, ์ฒ์์๋ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(optimal substructure)๊ฐ ์ฑ๋ฆฝํ๋์ง์ ๋ํ ์์ฌ์ ํด ๋ณด์๋ค! > $w$๊ฐ์ ์ฌ๊ฑด์ ํด๊ฒฐํ๋ ์ต์ ์ ์ ํ์ $A$๋ผ๊ณ ํ์ ๋, ์ฌ๊ธฐ์ ์๋ก์ด ์ฌ๊ฑด์ด ์ถ๊ฐ๋์์ ๋ $(w+1)$๊ฐ์ ์ฌ๊ฑด์ ํด๊ฒฐํ๋ ์ต์ ์ ๊ฒฝ๋ก๋ $A$๋ฅผ ํฌํจํ๋๊ฐ? ์ด๊ฒ์ด ์ฌ์ค์ด๋ผ๋ฉด ์๋ก์ด ์ฌ๊ฑด์ด ์ถ๊ฐ๋ ๋๋ง๋ค, 1๋ฒ ๊ฒฝ์ฐฐ์ฐจ ํน์ 2๋ฒ ๊ฒฝ์ฐฐ์ฐจ๊ฐ ์ถ๋ํ๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ง ๊ณ ๋ คํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํ ์ ์๊ฒ ์ง๋ง ๊ทธ๋ ์ง ์๋ค. !
๋ฌธ์ ๋งํฌ TSP(Traveling Salesman Problem)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ ๋ช ํ ๋ฌธ์ ์ด๋ค. NP-Complete์ ๋ํ์ ๋ฌธ์ ๋ก ์์ง ๋คํญ ์๊ฐ ๋ด์ ํด๊ฒฐํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค! ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์์ด๋ก ๋ง๋ค์ด ์ผ์ผ์ด ํ์ํ๋ค๋ฉด $O(n!)$์ ์๊ฐ์ด ์์๋๋๋ฐ ์ด ๋ฌธ์ ์์๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ค. ์ ์ ์งํฉ $V$์ ๋ถ๋ถ์งํฉ $S$์ ์ ์ $j(j \neq 0)$์ ๋ํ์ฌ, $C(S, i)$๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ์. > $C(S, j)$ : ์งํฉ $S$์ ์ ์ ์ ํ ๋ฒ์ฉ ๋ชจ๋ ๋ฐฉ๋ฌธํ๊ณ ์ ์ $i$์์ ์ข ๋ฃ๋๋ ๊ฒฝ๋ก์ ์ต์ ๋น์ฉ ์ด๋ ๊ตฌํ๊ณ ์ ํ๋ ๋ต์ ๋ค์๊ณผ ๊ฐ๋ค. > $answer = \displaystyle\min_{i \in V, i \neq 0 }{[C(V, i) + dist(i, 0)]}$ ์ด๊น๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์
์์ผ๋ก ์ฌ๊ธฐ์ ์ฌ๋ฆด ํ ํ๋ฆฟ ์ฝ๋๋ Github์์๋ ๋ณผ ์ ์๊ณ , ๋งค์ฐ ์ค์ํ ๋ด์ฉ์ด ์๋๋ฉด ์ต์ ์ฝ๋๋ ์ด ๋ธ๋ก๊ทธ๊ฐ ์๋๋ผ Github์์๋ง ์ ์งํ ์์ ์ด๋ค! ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ธ DFS์ BFS์ด๋ค! DFS๋ ๋ณดํต ์ฌ๊ท ํจ์๋ก ๊ตฌํ๋๊ณ , BFS๋ ๋ณดํต Queue ์๋ฃ ๊ตฌ์กฐ๋ฅผ ํตํด์ ๊ตฌํ๋๊ณ , ์ด๋ฒ์๋ DFS์ BFS๋ฅผ ํฌ๊ฒ 4๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์ด์ ํ ํ๋ฆฟ์ ๋ง๋ค์ด ๋ณด์๋ค. ๋ด๊ฐ ์ฃผ๋ก ์งํค๋ ค๊ณ ๋ ธ๋ ฅํ๋ ์ฝ๋ฉ ์คํ์ผ์ ์์ด๋ก Comment๋ฅผ ๋ฌ์๋์๋ค...! > 1. ๊ทธ๋ํ์ ์ธ๋ถ ๊ตฌํ์ด ์ ํด์ง์ง ์์ ๊ฒฝ์ฐ > 2. ๊ทธ๋ํ์ ์ธ์ ํ๋ ฌ(adjacency matrix)์ด **2D arr
์๊ณ ๋ฆฌ์ฆ ์คํ์ฑํ ๋ฐฉ์ ๋ค์ด๊ฐ๊ธฐ ์ต๊ทผ์ ์ด๋๋ ํ๊ณ ์๋ฅด๋ฐ์ดํธ๋ ํด ๋ณด๊ณ ์ฌ๋ฌ ๊ฐ์ง ๋ฐ์ ์ผ๋ค์ด ๋ง์์์ธ์ง ์ค๋๋ง์ ๋ธ๋ก๊ทธ ๊ธ์ ์ฐ๋ ๊ฒ ๊ฐ๋ค! ์ฌ๋ ๋์ฒ๋ผ ์ง์์ ๋น๊ตด๊ฑฐ๋ฆฌ๋ฉฐ ์๊ฐ ๋ ๋ ๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ฅผ ํ๋ ๋๋ ์ด๋ ๋ ํ๊ต ์๋ธ๋ฆฌํ์์ ๋ณด๋ค๊ฐ ์ด๋ฐ ๊ธ์ ๋ณด๊ฒ ๋๋ค. ๊ตฐ ๋ณต๋ฌด๋ฅผ ๋ง์น๊ณ ๋ค์ ํ๊ธฐ๊น์ง ์ง์์ ์ฌ๊ณ ์๋ ๋๋ ๊ณต๋ถ๋ฅผ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํด๋ ์ง๊ธ์ด ์๋๋ฉด ์ด ์๊ฐ์ด ์๋ค๋ ์๊ฐ์ด ์์ฐ๋ค. ์ง๊ธ์ด ์๋๋ฉด ์ด ์๊ฐ์ด ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์, ๋ ์ ์์ ๋ ๋์๋ ์๊ฐ์๋ ๋ณํจ์ด ์์ง๋ง ์ด ๊ธ์ ๋ณด๊ณ ๋งค์ผ 1๋ฌธ์ ์ ๋๋ผ๋ฉด ํฐ ๋ถ๋ด ์์ด ์ฐธ์ฌํ ์ ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์ ์ชฝ์ง๋ฅผ ๋ณด๋ด๊ณ ์คํ์ฑํ ๋ฐฉ์ ๋ค์ด๊ฐ๋ค! ![](https://velog.velcdn.com/images/smilelee