Algorithms
์ ๋ ฌ
์ ํ ์ ๋ ฌ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ด ๋๋ ๋ณผ ์ ์๋ค.
๋จ์ํ์ง๋ง ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ : ์ ํ ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ, ๋ฒ๋ธ ์ ๋ ฌ
๋ณต์กํ์ง๋ง ์กฐ๊ธ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ : ํต ์ ๋ ฌ, ํ ์ ๋ ฌ, ํฉ๋ณ ์ ๋ ฌ, ๊ธฐ์ ์ ๋ ฌ
๊ทธ ์ค์์ ์ด๋ฒ์๋ ์ ํ ์ ๋ ฌ์ ๋ํด ์์๋ณด๋ ค ํ๋ค.
โจ ๊ฐ๋
ํด๋น ์์์ ์์๋ฅผ ๋ฃ์ ์์น๋ ์ด๋ฏธ ์ ํด์ ธ์๊ณ , ์ด๋ค ์์๋ฅผ ๋ฃ์์ง ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ์ฌ ์์น์ ์ ์ฅ๋ ๊ฐ์ ํฌ๊ธฐ๊ฐ ์๋, ํฌ๋์ ๋ฐ๋ผ์ ์ต์ ์ ํ ์ ๋ ฌ(์ค๋ฆ์ฐจ์ ์ ๋ ฌ)๊ณผ ์ต๋ ์ ํ ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ)๋ก ๋๋๋ค.
โจ ๋ก์ง
์ฃผ์ด์ง ๋ฐฐ์ด์์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก๋๋ค. ๊ธฐ์ค์ ์ฒ์๋ถํฐ ์์ํ๋ค.
์ฃผ์ด์ง ๋ฐฐ์ด์์ ๊ธฐ์ค ์ดํ์ ๊ฐ ์ค ์ต์๊ฐ์ ์ฐพ๋๋ค.
์ต์๊ฐ๊ณผ ๊ทธ ๊ธฐ์ค์ ๊ฐ์ ๊ต์ฒดํ๋ค.
๊ธฐ์ค ์ดํ์ ๋๋จธ์ง ๋ฐฐ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฒดํ๋ค.
โจ ์ฅ์
์๊ณ ๋ฆฌ์ฆ์ด ๋จ์ํ๋ค.
์ ๋ ฌ์ ์ํ ๋น๊ต๋ ์ฌ๋ฌ๋ฒ ์ํ๋์ง๋ง, ์ค์ ๋ก ๊ตํ ํ์๋ ์ ๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ตํ์ด ์ผ์ด๋์ผ ํ๋ ์๋ฃ ์ํ์์ ๋น๊ต์ ํจ์จ์ ์ธ ๋ฉด์ด ์๋ค.
์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด ์์์ ๊ตํํ๋ ๋ฐฉ์์ด๋ฏ๋ก, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์๋๋ค.
โจ ๋จ์
์๊ฐ ๋ณต์ก๋๊ฐ O(N^2)์ด๋ฏ๋ก ๋นํจ์จ์ ์ด๋ค.
๋ถ์์ ์ ๋ ฌ(Unstable Sort)์ด๋ค.
๊ฑฐํ ์ ๋ ฌ
์๋ก ์ธ์ ํ ๋ ์์๋ฅผ ๊ฒ์ฌํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ธ์ ํ 2๊ฐ์ ์์๋ฅผ ๋น๊ตํด ํฌ๊ธฐ๊ฐ ์์๋๋ก ๋์ด ์์ง ์์ผ๋ฉด ์๋ก ๊ตํํ๋ค.
์ ํ ์ ๋ ฌ๊ณผ ๊ธฐ๋ณธ ๊ฐ๋ ์ด ์ ์ฌํ๋ค.
โจ ๋ก์ง
1ํ์ ์ ์ฒซ ๋ฒ์งธ ์์์ ๋ ๋ฒ์งธ ์์๋ฅผ, ๋ ๋ฒ์งธ ์์์ ์ธ ๋ฒ์งธ ์์๋ฅผ, ์ธ ๋ฒ์งธ ์์์ ๋ค ๋ฒ์งธ ์์๋ฅผ, ... ์ด๋ฐ ์์ผ๋ก ๋ง์ง๋ง - 1 ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ๋น๊ตํ์ฌ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ์๋ก ๊ตํํ๋ค.
1ํ์ ์ ์ํํ๊ณ ๋๋ฉด ๊ฐ์ฅ ํฐ ์์๊ฐ ๋งจ ๋ค๋ก ์ด๋ํ๋ฏ๋ก 2ํ์ ์์๋ ๋งจ ๋์ ์๋ ์์๋ ์ ๋ ฌ์์ ์ ์ธ๋๊ณ , 2ํ์ ์ ์ํํ๊ณ ๋๋ฉด ๋์์ ๋๋ฒ์งธ ์์๊น์ง๋ ์ ๋ ฌ์์ ์ ์ธ๋๋ค. ์ด๋ ๊ฒ ์ ๋ ฌ์ 1ํ์ ์ํํ ๋๋ง๋ค ์ ๋ ฌ์์ ์ ์ธ๋๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ฉ ๋์ด๋๋ค.
โจ ์๊ฐ ๋ณต์ก๋
(n-1)+(n-2)+(n-3)+ ... +2+1 => n(n-1)/2์ด๋ฏ๋ก, O(N^2)์ด๋ค.
๋ฒ๋ธ ์ ๋ ฌ์ ์ ๋ ฌ์ด ๋์ด์๊ฑด, ์๋์ด์๊ฑด 2๊ฐ์ ์์๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ, ์ต์ ์ ๊ฒฝ์ฐ, ํ๊ท ์ ๊ฒฝ์ฐ ๋ชจ๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2)์ผ๋ก ๋์ผํ๋ค.
โจ ๊ณต๊ฐ ๋ณต์ก๋
์ฃผ์ด์ง ๋ฐฐ์ด ์์์ ๊ตํ์ ํตํด ์ ๋ ฌ์ด ์ํ๋๋ฏ๋ก O(N)์ด๋ค.
โจ ์ฅ์
๊ตฌํ์ด ๊ฐ๋จํ๊ณ ์์ค์ฝ๋๊ฐ ์ง๊ด์ ์ด๋ค.
์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋, ๊ฐ์ฅ ๋น ๋ฅด๋ค.
์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด ์์์ ์ ๋ ฌํ๋ ๋ฐฉ์์ด๋ฏ๋ก, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์๋๋ค.
์์ ์ ๋ ฌ์ด๋ค.
โจ ๋จ์
์๊ฐ ๋ณต์ก๋๊ฐ ์ต์ , ์ต์ , ํ๊ท ๋ชจ๋ O(N^2)์ด๋ฏ๋ก ๋นํจ์จ์ ์ด๋ค.
๋ค๋ฅธ ์ ๋ ฌ์ ๋นํด ์ ๋ ฌ ์๋๊ฐ ๋๋ฆฌ๋ค.
๊ตํ ํ์๊ฐ ๋ง๋ค.
์ญ์๋ฐฐ์ด์ ์ ๋ ฌํ ๋, ๊ฐ์ฅ ๋๋ฆฌ๋ค.
์ฝ์
์ ๋ ฌ
โจ ๊ฐ๋
์ ์์ ์นด๋๋ฅผ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ๋ค.
์๋ก์ด ์นด๋๋ฅผ ๊ธฐ์กด์ ์ ๋ ฌ๋ ์นด๋ ์ฌ์ด์ ์ฌ๋ฐ๋ฅธ ์๋ฆฌ๋ฅผ ์ฐพ์ ์ฝ์ ํ๋ค.
2๋ฒ์งธ ์์๋ถํฐ ์์ํ์ฌ ๊ทธ ์(์ผ์ชฝ)์ ์์๋ค๊ณผ ๋น๊ตํ์ฌ ์ฝ์ ํ ์์น๋ฅผ ์ง์ ํ ํ, ์์๋ฅผ ๋ค๋ก ์ฎ๊ธฐ๊ณ ์ง์ ๋ ์๋ฆฌ์ ์๋ฃ๋ฅผ ์ฝ์ ํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ต์ ์ ๊ฒฝ์ฐ, O(N)์ด๋ผ๋ ์์ฒญ๋๊ฒ ๋น ๋ฅธ ํจ์จ์ฑ์ ๊ฐ์ง๊ณ ์์ด, ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ถ๋ก ์ฌ์ฉ๋ ๋งํผ ์ข์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
โจ ๋ก์ง
์ ๋ ฌ์ 2๋ฒ์งธ ์์น(index)์ ๊ฐ์ standard์ ์ ์ฅํ๋ค
standard์ ์ด์ ์ ์๋ ์์๋ค๊ณผ ๋น๊ตํ์ฌ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ฉฐ ์ฝ์ ํด ๋๊ฐ๋ค.
1๋ฒ์ผ๋ก ๋์๊ฐ์ ๋ค์ ์์น(index)์ ๊ฐ์ standard์ ์ ์ฅํ๊ณ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
โจ ์๊ฐ ๋ณต์ก๋
์ต์ ์ ๊ฒฝ์ฐ(์ญ์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๊ฒฝ์ฐ), ์ ํ ์ ๋ ฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก (n-1)+(n-2)+ ... +2+1 => n(n-1)/2 ์ฆ, O(N^2)์ด๋ค.
ํ์ง๋ง, ๋ชจ๋ ์ ๋ ฌ์ด ๋์ด ์๋ ๊ฒฝ์ฐ, ํ๋ฒ์ฉ๋ง ๋น๊ตํ๋ฏ๋ก O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๋ํ, ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋๋ฐฐ์ด์ ์๋ฃ๋ฅผ ํ๋์ฉ ์ฝ์ /์ ๊ฑฐํ๋ ๊ฒฝ์ฐ์๋ ํ์ค์ ์ผ๋ก ์ต๊ณ ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋๋๋ฐ, ํ์์ ์ ์ธํ ์ค๋ฒํค๋๊ฐ ๋งค์ฐ ์ ๊ธฐ ๋๋ฌธ์ด๋ค.
์ต์ ์ ๊ฒฝ์ฐ : O(N)
ํ๊ท ๊ณผ ์ต์ ์ ๊ฒฝ์ฐ : O(N^2)
โจ ๊ณต๊ฐ ๋ณต์ก๋
์ฃผ์ด์ง ๋ฐฐ์ด ์์์ ๊ตํ์ ํตํด ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ O(N)์ด๋ค.
โจ ์ฅ์
์๊ณ ๋ฆฌ์ฆ์ด ๋จ์ํ๋ค.
๋๋ถ๋ถ์ ์์๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ, ๋งค์ฐ ํจ์จ์ ์ผ ์ ์๋ค.
์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด ์์์ ๊ตํํ๋ ๋ฐฉ์์ด๋ฏ๋ก, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์๋๋ค.
์ ํ ์ ๋ ฌ์ด๋ ๋ฒ๋ธ ์ ๋ ฌ์ ๋นํ์ฌ ์๋์ ์ผ๋ก ๋น ๋ฅด๋ค.
โจ ๋จ์
๋น๊ต์ ๋ง์ ์๋ค์ ์ด๋์ ํฌํจํ๋ค.
๋น๊ตํ ์๊ฐ ๋ง๊ณ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ์ ์ ํฉํ์ง ์๋ค.(๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก ๋นํจ์จ์ )
ํ๊ท ๊ณผ ์ต์ ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2)์ด๋ฏ๋ก ๋นํจ์จ์ ์ด๋ค.
๋ณํฉ ์ ๋ ฌ
ํฉ๋ณ ์ ๋ ฌ์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ, ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ์ ํตํด ๊ตฌํํ๋ค.
โจ ๊ฐ๋
๋น ๋ฅธ ์ ๋ ฌ๋ก ๋ถ๋ฅ๋๋ฉฐ, Quick Sort์ ํจ๊ป ๋ง์ด ์ธ๊ธ๋๋ ์ ๋ ฌ ๋ฐฉ์์ด๋ค.
Quick Sort์๋ ๋ฐ๋๋ก ์์ ์ ๋ ฌ์ ์ํ๋ค.
์๊ฐ๋ณต์ก๋
์์๋ฅผ ์ชผ๊ฐ ํ, ๋ค์ ํฉ๋ณ์ํค๋ฉด์ ์ ๋ ฌํด๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ชผ๊ฐ๋ ๋ฐฉ์์ ํต ์ ๋ ฌ๊ณผ ์ ์ฌ.
โจ ์ฅ์
๋ฐ์ดํฐ์ ๋ถํฌ์ ์ํฅ์ ๋ ๋ฐ๋๋ค. ์ฆ, ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ด๋ ๊ฐ์ ์ ๋ ฌ๋๋ ์๊ฐ์ ๋์ผํ๋ค. -> O(N logN)
ํฌ๊ธฐ๊ฐ ํฐ ๋ ์ฝ๋๋ฅผ ์ ๋ ฌํ ๊ฒฝ์ฐ, LinkedList๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ณํฉ ์ ๋ ฌ์ ํต ์ ๋ ฌ์ ํฌํจํ ๋ค๋ฅธ ์ด๋ค ์ ๋ ฌ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์จ์ ์ด๋ค.
์์ ์ ๋ ฌ์ ์ํ๋ค.
โจ ๋จ์
๋ ์ฝ๋๋ฅผ ๋ฐฐ์ด๋ก ๊ตฌ์ฑํ๋ค๋ฉด, ์์ ๋ฐฐ์ด์ด ํ์ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ด๋ํ๋ค.
์ ์๋ฆฌ ์ ๋ ฌ์ด ์๋๋ค.
๋ ์ฝ๋์ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ์๋ ์ด๋ ํ์๊ฐ ๋ง์ผ๋ฏ๋ก ๋งค์ฐ ํฐ ์๊ฐ์ ๋ญ๋น๋ฅผ ์ด๋ํ๋ค.
โจ ์๊ฐ ๋ณต์ก๋
ํ๊ท : O(N logN)
์ต์ : O(N logN)
์ต์ : O(N logN)
์ด๋ถ ํ์
ํ์ ๋ฒ์๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ฉด์ ์ฐพ๋ ๋ฐฉ์
์ฒ์๋ถํฐ ๋๊น์ง ๋๋ฉด์ ํ์ํ๋ ๊ฒ๋ณด๋ค ํจ~~~์ฌ ๋น ๋ฅธ ์ฅ์ ์ ์ง๋
์๊ฐ๋ณต์ก๋ ์ ์ฒด ํ์ : O(N) ์ด๋ถ ํ์ : O(logN)
โจ ์งํ ์์
์ฐ์ ์ ๋ ฌ์ ํด์ผ ํจ
left์ right๋ก mid ๊ฐ ์ค์
mid์ ๋ด๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ๊ณผ ๋น๊ต
๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ๋์ผ๋ฉด : left = mid+1 ๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ๋ฎ์ผ๋ฉด : right = mid - 1
left > right๊ฐ ๋ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ
ํต ์ ๋ ฌ
โจ ๊ฐ๋
ํต ์ ๋ ฌ์ ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ์ ํตํด ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค.
๋ถํ ์ ๋ณต(Divide and Conquer) : ๋ฌธ์ ๋ฅผ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ํด๊ฒฐํ ๋ค์, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ๋ต์ด๋ค.
๋ถ์์ ์ ๋ ฌ์ ์ํ๋ฉฐ, ๋ค๋ฅธ ์์์์ ๋น๊ต๋ง์ผ๋ก ์ ๋ ฌ์ ์ํํ๋ ๋น๊ต ์ ๋ ฌ์ ์ํ๋ค.
๋ํ, Merge Sort์ ๋ฌ๋ฆฌ Quick Sort๋ ๋ฐฐ์ด์ ๋น๊ท ๋ฑํ๊ฒ ๋ถํ ํ๋ค.
โจ ๋ก์ง
๋ฐฐ์ด ๊ฐ์ด๋ฐ์ ํ๋์ ์์๋ฅผ ๊ณ ๋ฅธ๋ค. ์ด๋ ๊ฒ ๊ณ ๋ฅธ ์์๋ ํผ๋ฒ(pivot)์ด๋ผ๊ณ ํ๋ค.
ํผ๋ฒ ์์๋ ํผ๋ฒ๋ณด๋ค ๊ฐ์ด ์์ ๋ชจ๋ ์์๋ค์ด ์ค๊ณ , ํผ๋ฒ ๋ค์๋ ํผ๋ฒ๋ณด๋ค ๊ฐ์ด ํฐ ๋ชจ๋ ์์๋ค์ด ์ค๋๋ก ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋๋ก ๋๋๋ค. ์ด๋ ๊ฒ ๋ฐฐ์ด์ ๋๋ก ๋๋๋ ๊ฒ์ ๋ถํ (Divide)์ด๋ผ๊ณ ํ๋ค. ๋ถํ ์ ๋ง์น ๋ค์ ํผ๋ฒ์ ๋ ์ด์ ์์ง์ด์ง ์๋๋ค.
๋ถํ ๋ ๋ ๊ฐ์ ์์ ๋ฐฐ์ด์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ฌ๊ท ํธ์ถ์ด ํ๋ฒ ์งํ๋ ๋๋ง๋ค ์ต์ํ ํ๋์ ์์๋ ์ต์ข ์ ์ผ๋ก ์์น๊ฐ ์ ํด์ง๋ฏ๋ก, ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋์ ๋๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค.
๋ถํ (Divide) : ์ฃผ์ด์ง ๋ฐฐ์ด์ ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋น๊ท ๋ฑํ๊ฒ 2๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ถํ ํ๋ค.(ํผ๋ฒ์ ์ค์์ผ๋ก ์ผ์ชฝ : ํผ๋ฒ๋ณด๋ค ์์ ์์๋ค, ์ค๋ฅธ์ชฝ : ํผ๋ฒ๋ณด๋ค ํฐ ์์๋ค)
์ ๋ณต(Conquer) : ๋ถ๋ถ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค. ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ ์์ง ์์ผ๋ฉด ์ํ ํธ์ถ์ ์ด์ฉํด ๋ค์ ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ค.
โจ Qucik Sort ๊ฐ์
์์ ์ฝ๋์์๋ ํผ๋ฒ์ ๋ฐฐ์ด์ ๊ฐ์ด๋ฐ ์์๋ก ์ง์ ํจ์ผ๋ก์จ ์ด๋ ์ ๋ ์ฑ๋ฅ์ ๊ฐ์ ํ ํํ์ด๋ค.
ํ์ง๋ง, ํผ๋ฒ ๊ฐ์ด ์ต์๋ ์ต๋๊ฐ์ผ๋ก ์ง์ ๋๋ฉด ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ์์๋ค์ด ๋ค์ด๊ฐ ๊ฐ์ ์ฐพ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค. O(N^2)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
์ฆ, ์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด์ด ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ๋์ด ์์ผ๋ฉด O(N^2)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ์ด๋, ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์๋ ๊ฐ๊ณผ ์ค๊ฐ๊ฐ์ ๊ตํํด์ค๋ค๋ฉด ํ๋ฅ ์ ์ผ๋ก๋๋ง ์๊ฐ ๋ณต์ก๋ O(N logN)์ผ๋ก ๊ฐ์ ํ ์ ์๋ค.
ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ํ๋ค ํ๋๋ผ๋ Quick Sort์ ์ต์ ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(N logN)์ด ๋๋ ๊ฒ์ ์๋๋ค.
โจ ์๊ฐ ๋ณต์ก๋
์ต์ ์ ๊ฒฝ์ฐ : T(N) = O(N logN)
๋น๊ต ํ์ : logN
โจ ๊ณต๊ฐ ๋ณต์ก๋
์ฃผ์ด์ง ๋ฐฐ์ด ์์์ ๊ตํ์ ํตํด ์ ๋ ฌ์ด ์ํ๋๋ฏ๋ก O(N)์ด๋ค.
โจ ์ฅ์
๋ถํ์ํ ๋ฐ์ดํฐ์ ์ด๋์ ์ค์ด๊ณ ๋จผ ๊ฑฐ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ฟ๋ง ์๋๋ผ, ํ๋ฒ ๊ฒฐ์ ๋ ํผ๋ฒ๋ค์ด ์ถํ ์ฐ์ฐ์์ ์ ์ธ๋๋ ํน์ฑ ๋๋ฌธ์, ์๊ฐ ๋ณต์ก๋๊ฐ O(N logN)์ ๊ฐ์ง๋ ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ์ ๋๋ ๊ฐ์ฅ ๋น ๋ฅด๋ค.
์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด ์์์ ๊ตํํ๋ ๋ฐฉ์์ด๋ฏ๋ก, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์๋๋ค.
โจ ๋จ์
๋ถ์์ ์ ๋ ฌ์ด๋ค.
์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ํด์๋ Quick Sort์ ๋ถ๊ท ํ ๋ถํ ์ ์ํด ์คํ๋ ค ์ํ ์๊ฐ์ด ๋ ๋ง์ด ๊ฑธ๋ฆฐ๋ค.
โจ ๊ฒฐ๋ก
Quick Sort๋ ํ๊ท ์ ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
Java์์๋ Arrays.sort()๊ฐ ๋ด๋ถ์ ์ผ๋ก Dual Pivot Quick Sort๋ก ๊ตฌํ๋์ด ์์ ์ ๋๋ก ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ํ, ๊ธฐ์ ๋ฉด์ ์์ ๋น๋ฒํ๊ฒ ๋์ค๋ฏ๋ก ๋ฐ๋์ ์์งํด์ผ ํ๋ค.
ํ ์ ๋ ฌ
์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ ๋ ฌ ๋ฐฉ์์ด๋ค.
๋ถ์์ ์ ๋ ฌ์ ์ํ๋ค.
[์์ ์ด์ง ํธ๋ฆฌ?]
์ฝ์ ํ ๋, ์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋๋ก ์ถ๊ฐํ๋ ์ด์ง ํธ๋ฆฌ
โจ ์๊ฐ ๋ณต์ก๋
ํ๊ท : O(N logN)
์ต์ : O(N logN)
์ต์ : O(N logN)
โจ ๋ก์ง
์ต๋ ํ์ ๊ตฌ์ฑํ๋ค.
ํ์ฌ ํ ๋ฃจํธ๋ ๊ฐ์ฅ ํฐ ๊ฐ์ด ์กด์ฌํ๋ค. ๋ฃจํธ์ ๊ฐ์ ๋ง์ง๋ง ์์์ ๋ฐ๊พผ ํ, ํ์ ์ฌ์ด์ฆ๋ฅผ ํ๋ ์ค์ธ๋ค.
ํ์ ์ฌ์ด์ฆ๊ฐ 1๋ณด๋ค ํฌ๋ฉด ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ต๋ ๊ฐ์ ํ๋์ฉ ๋ฝ์๋ด๋ฉด์ ์ ๋ ฌํ๋ ๊ฒ์ด Heap Sort์ด๋ค.
๊ธฐ์ ์ ๋ ฌ
โจ Comparison Sort
N๊ฐ ์์์ ๋ฐฐ์ด์ด ์์ ๋, ์ด๋ฅผ ๋ชจ๋ ์ ๋ ฌํ๋ ๊ฐ์ง์๋ N!์
๋ฐ๋ผ์, Comparison Sort๋ฅผ ํตํด ์๊ธฐ๋ ํธ๋ฆฌ์ ๋ง๋จ ๋ ธ๋๊ฐ N! ์ด์์ ๋ ธ๋ ๊ฐฏ์๋ฅผ ๊ฐ๊ธฐ ์ํด์๋, 2^h >= N! ๋ฅผ ๋ง์กฑํ๋ h๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ , ์ด ์์ h > O(nlgn)์ ๊ฐ์ ธ์ผ ํ๋ค. (h๋ ํธ๋ฆฌ์ ๋์ด,,, ์ฆ Comparison sort์ ์๊ฐ ๋ณต์ก๋์)
์ด๋ฐ O(nlgn)์ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ Comparison์ ํ์ง ์๋ ๊ฒ
โจ Radix sort
๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์ (Radix) ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌ์ ์งํํ๋ ๋ฐฉ์
์ ๋ ฅ ๋ฐ์ดํฐ์ ์ต๋๊ฐ์ ๋ฐ๋ผ์ Counting Sort์ ๋นํจ์จ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด์, Radix Sort๋ฅผ ์ฌ์ฉํ ์ ์์.
์๋ฆฟ์์ ๊ฐ ๋ณ๋ก (์) ๋์งธ ์๋ฆฌ, ์ฒซ์งธ ์๋ฆฌ) ์ ๋ ฌ์ ํ๋ฏ๋ก, ๋์ฌ ์ ์๋ ๊ฐ์ ์ต๋ ์ฌ์ด์ฆ๋ 9์ (๋ฒ์ : 0 ~ 9)
์๊ฐ ๋ณต์ก๋ : O(d * (n + b))
d๋ ์ ๋ ฌํ ์ซ์์ ์๋ฆฟ์, b๋ 10 (k์ ๊ฐ์ผ๋ 10์ผ๋ก ๊ณ ์ ๋์ด ์๋ค.)
( Counting Sort์ ๊ฒฝ์ฐ : O(n + k) ๋ก ๋ฐฐ์ด์ ์ต๋๊ฐ k์ ์ํฅ์ ๋ฐ์ )
์ฅ์ : ๋ฌธ์์ด, ์ ์ ์ ๋ ฌ ๊ฐ๋ฅ
๋จ์ : ์๋ฆฟ์๊ฐ ์๋ ๊ฒ์ ์ ๋ ฌํ ์ ์์. (๋ถ๋ ์์ซ์ )
์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ bucket ๊ณต๊ฐ์ด ํ์ํจ.
๊ณ์ ์ ๋ ฌ
โจ Comparison Sort
N๊ฐ ์์์ ๋ฐฐ์ด์ด ์์ ๋, ์ด๋ฅผ ๋ชจ๋ ์ ๋ ฌํ๋ ๊ฐ์ง์๋ N!์
๋ฐ๋ผ์, Comparison Sort๋ฅผ ํตํด ์๊ธฐ๋ ํธ๋ฆฌ์ ๋ง๋จ ๋ ธ๋๊ฐ N! ์ด์์ ๋ ธ๋ ๊ฐฏ์๋ฅผ ๊ฐ๊ธฐ ์ํด์๋, 2^h >= N! ๋ฅผ ๋ง์กฑํ๋ h๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ , ์ด ์์ h > O(nlgn)์ ๊ฐ์ ธ์ผ ํ๋ค. (h๋ ํธ๋ฆฌ์ ๋์ด,,, ์ฆ Comparison sort์ ์๊ฐ ๋ณต์ก๋์)
์ด๋ฐ O(nlgn)์ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ Comparison์ ํ์ง ์๋ ๊ฒ
โจ Counting Sort ๊ณผ์
์๊ฐ ๋ณต์ก๋ : O(n + k) -> k๋ ๋ฐฐ์ด์์ ๋ฑ์ฅํ๋ ์ต๋๊ฐ
๊ณต๊ฐ ๋ณต์ก๋ : O(k) -> k๋งํผ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ผ ํจ.
Counting์ด ํ์ : ๊ฐ ์ซ์๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ์ผ๋ค.
์ฌ์ฉ : ์ ๋ ฌํ๋ ์ซ์๊ฐ ํน์ ํ ๋ฒ์ ๋ด์ ์์ ๋ ์ฌ์ฉ
(Suffix Array ๋ฅผ ์ป์ ๋, ์๊ฐ๋ณต์ก๋ O(nlgn)์ผ๋ก ์ป์ ์ ์์.)
์ฅ์ : O(n) ์ ์๊ฐ๋ณต์ก๋
๋จ์ : ๋ฐฐ์ด ์ฌ์ด์ฆ N ๋งํผ ๋ ๋, ์ฆ๊ฐ์์ผ์ฃผ๋ Counting ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ํผ.
(๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํจ)
ํด์ ํ
์ด๋ธ ๊ตฌํ
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ํด ํ์์ ์ผ๋ก ์์์ผ ํ ๊ฐ๋
๋ธ๋ฃจํธ ํฌ์ค(์์ ํ์)์ผ๋ก๋ ์๊ฐ์ด๊ณผ์ ๋น ์ง๊ฒ ๋๋ ๋ฌธ์ ์์๋ ํด์๋ฅผ ์ ์ฉ์์ผ์ผ ํ๋ค.
โจ ํด์ ํ
์ด๋ธ ๊ตฌํ
ํด์ ํ ์ด๋ธ์ ํ์์ ์ต๋ํ ์ค์ฌ์ฃผ๊ธฐ ์ํด, input์ ๋ํ key ๊ฐ์ ์ป์ด๋ด์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
๋์ ๊ณํ๋ฒ (Dynamic Programming)
๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๋ฐฉ๋ฒ
ํํ ๋งํ๋ DP๊ฐ ๋ฐ๋ก '๋์ ๊ณํ๋ฒ'
ํ ๊ฐ์ง ๋ฌธ์ ์ ๋ํด์, ๋จ ํ ๋ฒ๋ง ํ๋๋ก ๋ง๋ค์ด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฆ, ๋๊ฐ์ ์ฐ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๋ก ๋ง๋ค์ด์ค๋ค. ์คํ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๋ง์ด ์ด์ฉ๋๋ ์ํ์ ์ ๊ทผ ๋ฐฉ์์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋์ ๊ณํ๋ฒ์ Optimal Substructure์์ ํจ๊ณผ๋ฅผ ๋ฐํํ๋ค.
Optimal Substructure : ๋ต์ ๊ตฌํ๊ธฐ ์ํด ์ด๋ฏธ ํ๋ ๋๊ฐ์ ๊ณ์ฐ์ ๊ณ์ ๋ฐ๋ณตํ๋ ๋ฌธ์ ๊ตฌ์กฐ
โจ ์ ๊ทผ ๋ฐฉ์
์ปค๋ค๋ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ฒ ์ชผ๊ฐ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ธ ๋ถํ ์ ๋ณต๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค. ํ์ง๋ง ๊ฐ๋จํ ๋ฌธ์ ๋ก ๋ง๋๋ ๊ณผ์ ์์ ์ค๋ณต ์ฌ๋ถ์ ๋ํ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
์ฆ, ๋์ ๊ณํ๋ฒ์ ๊ฐ๋จํ ์์ ๋ฌธ์ ๋ค ์์์ '๊ณ์ ๋ฐ๋ณต๋๋ ์ฐ์ฐ'์ ํ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ํ ์ ์๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
โจ ์กฐ๊ฑด
์์ ๋ฌธ์ ์์ ๋ฐ๋ณต์ด ์ผ์ด๋จ
๊ฐ์ ๋ฌธ์ ๋ ํญ์ ์ ๋ต์ด ๊ฐ์
์ด ๋ ๊ฐ์ง ์กฐ๊ฑด์ด ์ถฉ์กฑํ๋ค๋ฉด, ๋์ ๊ณํ๋ฒ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ํญ์ ์ ๋ต์ด ๊ฐ๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๋ค๋ ์ ์ ํ์ฉํด ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)์ผ๋ก ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ๋ ๊ฒ์ด๋ค.
๋ฉ๋ชจ์ด์ ์ด์ (Memoization) : ํ ๋ฒ ๊ณ์ฐํ ๋ฌธ์ ๋ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ์ ์ฅํด๋๊ณ ํ์ฉํ๋ ๋ฐฉ์
ํผ๋ณด๋์น ์์ด์์ ์ฌ๊ท๋ฅผ ํ์ฉํ์ฌ ํ ๊ฒฝ์ฐ, ๊ฐ์ ์ฐ์ฐ์ ๊ณ์ ๋ฐ๋ณตํจ์ ์ ์ ์๋ค.
์ด๋, ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๊ฐ์ ์์ ์ ๋ํ์ด ํ์ง ์๋๋ก ๊ตฌํํ๋ฉด ํจ์จ์ ์ด๋ค.
์ด์ฒ๋ผ ๊ฐ์ ์ฐ์ฐ์ด ๊ณ์ ๋ฐ๋ณต์ ์ผ๋ก ์ด์ฉ๋ ๋, ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์ฉํ์ฌ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๋ฉด ํจ์จ์ `
ํผ๋ณด๋์น ๊ตฌํ์ ์ฌ๊ท๋ฅผ ํ์ฉํ๋ค๋ฉด ์๊ฐ๋ณต์ก๋๋ O(2^n)์ด์ง๋ง, ๋์ ๊ณํ๋ฒ์ ํ์ฉํ๋ฉด O(N)์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
โจ ๊ตฌํ ๋ฐฉ์
Bottom-up : ์์ ๋ฌธ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
Top-down : ํฐ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ํ๋ฆฌ์ง ์์ ์์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๊ทธ๋ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ (์ฌ๊ท ๋ฐฉ์)
Bottom-up์ ํด๊ฒฐ์ด ์ฉ์ดํ์ง๋ง, ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง
Top-down์ ๊ฐ๋ ์ฑ์ด ์ข์ง๋ง, ์ฝ๋ ์์ฑ์ด ํ๋ฌ
๋์ ๊ณํ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ ๋๋, ์ฐ์ ์์ ๋ฌธ์ ๋ถํฐ ํด๊ฒฐํด๋๊ฐ๋ณด๋ ๊ฒ์ด ์ข๋ค.
์์ ๋ฌธ์ ๋ค์ ํ์ด๋๊ฐ๋ค๋ณด๋ฉด ์ด์ ์ ๊ตฌํด๋ ๋ ์์ ๋ฌธ์ ๋ค์ด ํ์ฉ๋๋ ๊ฒ์ ํ์ธํ๊ฒ ๋๋ค. ์ด์ ๋ํ ๊ท์น์ ์ฐพ์์ ๋ ์ ํ์์ ๋์ถํด๋ด์ด ๋์ ๊ณํ๋ฒ์ ์ ์ฉ์ํค์
ํ์๋ฒ (Greedy)
๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํน์ ํ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋กํ๋ค.
์ฌ๊ธฐ์ DP๊ฐ ์ ์ฉ๋๋ ์ด์ ๋, ๊ตณ์ด ํ ๋ฒ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๊ณณ์ ๋ค์ ๊ตฌํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ํ์ฉํด ์ ์ ์์ ์ ์ ๊น์ง ๊ฐ์ ์ ๋ฐ๋ผ ์ด๋ํ ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌํ ์ ์๋ค.
๋ค์ต์คํธ๋ผ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ ๊ฐ์ง๋ฅผ ์ ์ฅํด์ผ ํ๋ค.
ํด๋น ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅ
์ ์ ์ ๋ฐฉ๋ฌธํ๋ ์ง ์ ์ฅ
์์ ์ ์ ์ผ๋ก๋ถํฐ ์ ์ ๋ค์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด๊ณผ, ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๋ค์ต์คํธ๋ผ์ ์๊ณ ๋ฆฌ์ฆ ์์๋ ์๋์ ๊ฐ๋ค.
์ต๋จ ๊ฑฐ๋ฆฌ ๊ฐ์ ๋ฌดํ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
์์ ์ ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 0์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๋ค.
์์ ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ฐฑ์ ํ๋ค.
๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ค ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์ต์์ธ ์ ์ ์ ์ฐพ๋๋ค.
์ฐพ์ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ก ๋ณ๊ฒฝ ํ, ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ฐฑ์ ํ๋ค.
๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ ๋๊น์ง 4~5๋ฒ์ ๋ฐ๋ณตํ๋ค.
โจ ๋ค์ต์คํธ๋ผ ์ ์ฉ ์ ์์์ผํ ์
์ธ์ ํ๋ ฌ๋ก ๊ตฌํํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ด๋ค.
์ธ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(N*logN)์ด๋ค.
์ ํ ํ์์ผ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ ๋ฌธ์ ๋ ์ธ์ ๋ฆฌ์คํธ๋ก ์ ๊ทผํด์ผํ๋ค. (์ฐ์ ์์ ํ)
๊ฐ์ ์ ๊ฐ์ด ์์์ผ ๋๋ง ๊ฐ๋ฅํ๋ค.
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ(Two Pointers Algorithm) ๋๋ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ฒ์ 20๋ ๋ ์๋ฐ๊ธฐ ๋ผ์ธ ๊ณต์ฑ ์ฝ๋ฉ ํ ์คํธ์์ ์ด๋ฅผ ํ์ฉํ ๋งํ ๋ฌธ์ ๊ฐ ๋์๋ค. ๊ทธ๋์ ์์ ์ ์ ๋ฆฌํ๋ ๋ด์ฉ์ ๋ ์ฌ๋ฆฌ๋ฉฐ, ๋ค์ ์ ๋ฆฌํ๋ ค ๊ธ์ ์ด๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค ์์ ํ์์ผ๋ก ํด๊ฒฐํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ์ข
์ข
์๋ค. ์ด๋ป๊ฒ ํ์ด์ผ ํ๋์ง ๊ทธ ๋น์ ๊ฒ์ํ์ ๋, ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ์ด ๋์์ด์๋ค.
1์ฐจ์ ๋ฐฐ์ด์ด ์๊ณ , ์ด ๋ฐฐ์ด์์ ๊ฐ์ ๋ค๋ฅธ ์์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ 2๊ฐ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํด๊ฐ๋ฉด์ ์ํ๋ ๊ฒ์ ์ป๋ ํํ์ด๋ค. ์ด๋๋ฌธ์ ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ๋ถ๋ฅธ๋ค.
N์นธ์ 1์ฐจ์ ๋ฐฐ์ด์ด ์์ ๋, ๋ถ๋ถ ๋ฐฐ์ด ์ค ๊ทธ ์์์ ํฉ์ด M์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ํ ์คํธ ํด๋ณด๋ฉด ๊ตฌ๊ฐ ํฉ์ ๊ตฌ๊ฐ ๋ฐฐ์ด๋ก O(1)๋ง์ ๊ตฌํ๋ค๊ณ ํด๋ ๊ฒฝ์ฐ์ ์๋ O(N^2)์ด ๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค. N์ ์ต๋ ๋ฒ์๊ฐ ๋๋ฌด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ด
BFS & DFS
๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฌธ์ ๋ฅผ ํ ๋ ์๋นํ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฐ๋ ์ด๋ค.
๋ฌธ์ ์ ์ํฉ์ ๋ง๊ฒ BFS์ DFS๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ ์ฝ๋๋ ๋ฐฑ์ค์ ์๋ DFS์ BFS ๋ฌธ์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
V : ์ ์ , E : ๊ฐ์
BFS
๋๋น ์ฐ์ ํ์์ด๋ผ ํ๋ฉฐ BFS(Breadth-First Search)๋ผ ๋ถ๋ฅธ๋ค.
๋ฃจํธ ๋ ธ๋ ํน์ ์์์ ๋ ธ๋์์ ์์ํด ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ.
์์ ์ ์ ์ผ๋ก๋ถํฐ ๊ฐ๊น์ด ์ ์ ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ์ ์ ์ ๋์ค์ ๋ฐฉ๋ฌธํ๋ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
์ฆ, ๊น๊ฒ ํ์ํ๊ธฐ ์ ์ ๋๊ฒ ํ์ํ๋ ๊ฒ์ด๋ค.
ํ๋ฅผ ์ฌ์ฉํ๋ค. (ํด๋น ๋ ธ๋์ ์ฃผ๋ณ๋ถํฐ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.)
์ต์ ๋น์ฉ(์ฆ, ๋ชจ๋ ๊ณณ์ ํ์ํ๋ ๊ฒ๋ณด๋ค ์ต์ ๋น์ฉ์ด ์ฐ์ ์ผ ๋)์ ์ ํฉํ๋ค.
์๊ฐ ๋ณต์ก๋
์ธ์ ํ๋ ฌ : O(V^2)
์ธ์ ๋ฆฌ์คํธ : O(V+E)
DFS
๊น์ด ์ฐ์ ํ์์ด๋ฉฐ DFS(Depth-First Search)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ฃจํธ ๋ ธ๋์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ค.
๋๊ฒ ํ์ํ๊ธฐ ์ ์ ๊น๊ฒ ํ์ํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฏธ๋ก๋ฅผ ํ์ํ ๋ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์ ๋๊น์ง ๊ณ์ ๊ฐ๋ค๊ฐ ๋ ์ด์ ๊ฐ ์ ์๊ฒ ๋๋ฉด ๋ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ๋ฆผ๊ธธ๋ก ๋์์์ ์ด๊ณณ์ผ๋ก๋ถํฐ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ค์ ํ์์ ์งํํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ๋ค.
์คํ์ด๋ ์ฌ๊ทํจ์๋ฅผ ํตํด ๊ตฌํํ๋ค.
๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐฉ๋ฌธํด์ผ ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ํฉํ๋ค.
์๊ฐ ๋ณต์ก๋
์ธ์ ํ๋ ฌ : O(V^2)
์ธ์ ๋ฆฌ์คํธ : O(V+E)
๊ทธ๋ํ ๊ตฌํ
ํ์
โจ ์์ ํ์
โจ์ด๋ถ ํ์(Binary Search)
์ด์ง ํ์ ํน์ ์ด๋ถ ํ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ์๋ฃ ๊ตฌ์กฐ์์ ํน์ ๊ฐ์ ์ฐพ์ ๋, ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ๋๋ ๊ฐ๋ฉด์ ํด๋น ๊ฐ์ ์ฐพ์๊ฐ๋ ๊ฒ์ด๋ค.
์ฆ, ํ์ ๋ฒ์๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ฉด์ ์ฐพ๋ ๋ฐฉ์์ด๋ค.
์ฒ์๋ถํฐ ๋๊น์ง ๋๋ฉด์ ํ์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์๊ฐ ๋ณต์ก๋
์ ์ฒด ํ์ : O(N)
์ด๋ถ ํ์ : O(logN)
์งํ ์์
์ ๋ ฌ์ ํ๋ค.
left์ right๋ก mid ๊ฐ์ ์ค์ ํ๋ค.
mid์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ๋น๊ตํ๋ค.
๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ํฌ๋ฉด -> left = mid + 1
๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ๋ฎ์ผ๋ฉด -> right = mid - 1
right < left๊ฐ ๋ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ๋ค
์ต๋ ๊ณต์ฝ์์ ์ต์ ๊ณต๋ฐฐ์
โจ ์ต๋๊ณต์ฝ์ GCD(Greatest Common Divisor)
์ต๋๊ณต์ฝ์๋ ๋ ์์ฐ์์ ๊ณตํต๋ ์ฝ์ ์ค ๊ฐ์ฅ ํฐ ์๋ฅผ ์๋ฏธํ๋ค.
ex) 72์ 30์ ์ต๋ ๊ณต์ฝ์๋ 6์ด๋ค.
โจ ์ต์ ๊ณต๋ฐฐ์ LCM(Least Common Multiple)
์ต์๊ณต๋ฐฐ์๋ ๋ ์์ฐ์์ ๊ณตํต๋ ๋ฐฐ์ ์ค ๊ฐ์ฅ ์์ ์๋ฅผ ์๋ฏธํ๋ค.
์ต์ ๊ณต๋ฐฐ์ = ๋ ์์ฐ์์ ๊ณฑ / ์ต๋ ๊ณต์ฝ์
ex) 72์ 30์ ์ต์ ๊ณต๋ฐฐ์๋ 360์ด๋ค.
โจ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ(Euclidean Algorithm)
2๊ฐ์ ์์ฐ์๋ฅผ ์ ๋ ฅ ๋ฐ์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด 2๋ถํฐ ๋ ์์ฐ์ ์ค ์์ ์์ฐ์๊น์ง ๋ชจ๋ ๋๋์ด๋ณด๋ฉด์ ๊ฐ์ฅ ํฐ ๊ณต์ฝ์๋ฅผ ๊ตฌํ ์ ์๋ค. ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(N)์ด ๋๋ค. ๋์ ๋ฐฉ๋ฒ์ ์๋์ง๋ง, ๋ณด๋ค ํจ์จ์ ๋์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ฉฐ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ O(logN)์ผ๋ก ์ค์ผ ์ ์๋ค.
ํธ์ ๋ฒ์ด๋? ๋ ์๊ฐ ์๋ก ์๋๋ฐฉ ์๋ฅผ ๋๋์ด์ ๊ฒฐ๊ตญ ์ํ๋ ์๋ฅผ ์ป๋ ๋ฐฉ๋ฒ
์ต์ฅ ์ฆ๊ฐ ์์ด (LIS)
โจ LIS (Longest Increasing Sequence)
์ต์ฅ ์ฆ๊ฐ ์์ด : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด
[ 7, 2, 3, 8, 4, 5 ] โ ํด๋น ๋ฐฐ์ด์์๋ [2,3,4,5]๊ฐ LIS๋ก ๋ต์ 4
โจ ๊ตฌํ ๋ฐฉ๋ฒ (์๊ฐ๋ณต์ก๋)
DP : O(N^2)
Lower Bound : O(NlogN)
โจ DP ํ์ฉ ์ฝ๋
์ต์ ๊ณตํต ์กฐ์ (LCA)
โจ LCA(Lowest Common Ancestor) ์๊ณ ๋ฆฌ์ฆ
์ต์ ๊ณตํต ์กฐ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
โ ๋ ์ ์ ์ด ๋ง๋๋ ์ต์ด ๋ถ๋ชจ ์ ์ ์ ์ฐพ๋ ๊ฒ!
๋นํธ๋ง์คํฌ(BitMask)
์งํฉ์ ์์๋ค์ ๊ตฌ์ฑ ์ฌ๋ถ๋ฅผ ํํํ ๋ ์ ์ฉํ ํ ํฌ๋
โจ ์ ๋นํธ๋ง์คํฌ๋ฅผ ์ฌ์ฉํ๋๊ฐ?
DP๋ ์์ด ๋ฑ, ๋ฐฐ์ด ํ์ฉ๋ง์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์
์์ ๋ฉ๋ชจ๋ฆฌ์ ๋น ๋ฅธ ์ํ์๊ฐ์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅ (But, ์์์ ์๊ฐ ๋ง์ง ์์์ผ ํจ)
์งํฉ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ํํํ ์ ์์
์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง
โจ ๋นํธ(Bit)๋?
์ปดํจํฐ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ์ต์ ๋จ์ (0๊ณผ 1)
2์ง๋ฒ์ ์๊ฐํ๋ฉด ํธํ๋ค.
โจ ๋นํธ ์ฐ์ฐ
AND, OR, XOR, NOT, SHIFT
AND(&) : ๋์ํ๋ ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ผ ๋, 1 ๋ฐํ
OR(|) : ๋์ํ๋ ๋ ๋นํธ ์ค ๋ชจ๋ 1์ด๊ฑฐ๋ ํ๋๋ผ๋ 1์ผ๋, 1 ๋ฐํ
XOR(^) : ๋์ํ๋ ๋ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅผ ๋, 1 ๋ฐํ
NOT(~) : ๋นํธ ๊ฐ ๋ฐ์ ํ์ฌ ๋ฐํ
SHIFT(>>, <<) : ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ ์ฎ๊ฒจ ๋ฐํ
์ผ์ชฝ ์ํํธ :
A * 2^B์ค๋ฅธ์ชฝ ์ํํธ :
A / 2^B
[์ผ ์ชฝ] 0001 โ 0010 โ 0100 โ 1000 : 1 โ 2 โ 4 โ 8 [์ค๋ฅธ์ชฝ] 1000 โ 0100 โ 0010 โ 0001 : 8 โ 4 โ 2 โ 1
๋นํธ์ฐ์ฐ ์ฐ์ต๋ฌธ์ : ๋ฐฑ์ค 12813
Iru cache (Least Recently Used)
โจ Cache ๊ฐ๋
์บ์๋ ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋๋ ์์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์บ์๋ ์ ๊ทผ ์๊ฐ์ ๋นํด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ๋ค์ ๊ณ์ฐํ๋ ์๊ฐ์ ์ ์ฝํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. ์บ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋์ผ๋ฉด ๊ณ์ฐ์ด๋ ์ ๊ทผ ์๊ฐ ์์ด ๋น ๋ฅธ ์๋๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. (์บ์๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค์ ์๋ ์ ํ์ด ์๋ค.)
โจ LRU Cache ๊ฐ๋
LRU๋ Least Recently Used์ ์ฝ์๋ก OS์ ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํ๋๋ก ์ต๊ทผ์ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์บ์์ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉํ์ง ์์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ค.
โจ LRU Cache ๊ตฌํ
LRU Cache ๊ตฌํ์ Doubly Linked List๋ฅผ ํตํด ๊ตฌํํ๋ค. head์ ๊ฐ๊น์ด ๋ฐ์ดํฐ์ผ์๋ก ์ต๊ทผ์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ด๊ณ , tail์ ๊ฐ๊น์ธ์๋ก ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์ ๋ฐ์ดํฐ๋ก ๊ฐ์ฃผํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋, ๊ฐ์ฅ ๋จผ์ ์ญ์ ๋๋๋ก ํ๋ค.
์ฝ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด head๋ก ์ฎ๊ฒจ ์ฐ์ ์์๋ฅผ ๋์ด๊ฒ ๋๊ณ , ์ญ์ ๋ ์ฐ์ ์์์์ ๋ฉ์ด์ง๊ฒ ๋๋ค.
Last updated