intro
๐ก two pointers๋ ๋ฐฐ์ด์์ ์๋ ์ด์ค for๋ฌธ์ผ๋ก O(N^2)์ ์ฒ๋ฆฌ๋๋ ์์ ์ 2๊ฐ ํฌ์ธํฐ์ ์์ง์์ผ๋ก O(N)์ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ด์ค for๋ฌธ์ผ๋ก ๋๋ฆฌ๋ฉด i=0์ผ๋์ ์ ๋ณด๋ฅผ i=1์ผ ๋ ์ ํ ์ฐ์ด์ง ์์ง๋ง, two pointers๋ i=0์ผ ๋์ ์์ ์ด i=1์ผ ๋์ ์์ ์ ์ฐ์ธ๋ค. ๊ณผ๊ฑฐ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ ์ฑ๋ก ํจ์จ์ ์ด๊ฒ index๋ฅผ O(N)์ผ๋ก ์์ง์ด๋ ์๊ณ ๋ฆฌ์ฆ. ์ด๋ถํ์ ๋ฌธ์ ๋ฅผ ํฌํฌ์ธํฐ๋ก๋ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ๊ทธ ๋ฐ๋๋ ๋ง๋ค. two pointers๋ O(N)์ผ๋ก, ๊ฐ๊ฐ์ ๋ชจ๋ case๋ฅผ ์ผ์ผ์ด ์ ๊ฒํ ํ์ ์์ด, ์ผ๋ถ case๋ ์ ํํ๋ ๊ฒฝ์ฐ๋ง ํ์ด๊ฐ ๊ฐ๋ฅ.
explanation
๐ก ์์ ๊ฐ์ ๋ฐฐ์ด์ด ์๋ค๊ณ ํ ๋, a์ผ๋ b~i๋ฅผ ๋๊ณ / b์ผ ๋ c~i๋ฅผ ๋๋ ํํ๋ก 2์ค ๋ฐ๋ณต๋ฌธ์ ๋๋ค๋ฉด O(N^2) naive approach๊ฐ ๋๋ฉฐ TLE๊ฐ ๋๋ case๊ฐ ๋ง๋ค. ์ด ๋ two-pointer approach๋ ๋ ๊ฐ์ pointer ์์์ ์ ๋์์ a๋ก ๋ ์ ์๊ณ / ํ ๊ฐ๋ a, ๋๋จธ์ง๋ i์ ๋๊ฑฐ๋ / ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐฐ์ด์์ ์์ํ๋ ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค. ์ ๋ฐฐ์ด์ two-pointer approach๋ก ์ ๊ทผํ์๋ฉด,
: ๋ ๊ฐ์ ํฌ์ธํฐ x์ y๊ฐ ์๊ณ ๋์์ ์ผ์ชฝ์์์ ์์ ์งํํ๋ค๊ณ ๊ฐ์ . x๋ a๋ถํฐ i๊น์ง ์ญ ์งํํ ์์ . x๋ a์ผ ๋ y๊ฐ a๋ถํฐ d๊น์ง ๊ฐ๋ค๊ณ ํ๋ฉด, ๊ทธ ๋ค์ x๊ฐ b์ผ ๋ y๊ฐ ๋ค์ a๋ถํฐ ์์ํ๋ ๊ฒ ์๋๋ผ, ์ด๋ฏธ ์งํํ d๋ถํฐ y๊ฐ ์งํํ๋ค. ๋ฐ๋ผ์, x๊ฐ b์ผ ๋ y๊ฐ a, b, c์ธ case๋ ๋ฌด์๋๋ค. ์ฆ, two-pointer approach๋ฅผ ์ธ ๋๋ ๊ณผ์ฐ x๊ฐ ์งํํ๋ฉด์ ์ด๋ฏธ y๊ฐ ์ง๋์น ๋ถ๋ถ์ ์๊ด์ํด๋ ๋๋์ง ์ด๋ฅผ ์ ํํ ํ์ธํ ํ์๊ฐ ์๋ค. ๊ฒฐ๊ตญ x๋ a๋ถํฐ i๊น์ง O(N), y๋ a๋ถํฐ i๊น์ง O(N)์ผ๋ก ํฉ O(N+N) ์๊ฐ ๋ณต์ก๋๊ฐ ๋์ค๊ฒ ๋๋ค(x๊ฐ a๋ถํฐ i๊น์ง ์งํํ๋ ๋์ y๋ a๋ถํฐ i๊น์ง ํ๋ฒ์ ์งํํ๋ฉด ๋๋ค ๋ณด๋ฉด ๊ธฐ์ตํ๊ธฐ์ฝ๋ค). ์๋นํ ํจ์จ์ ์ธ approach๋ก, ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฐฐ์ด์ ์์๋ก ๋ง์ถ๊ฑฐ๋(ex) ์ ๋ ฌํ๊ฑฐ๋) x์ y์ ์์ ์์น๋ฅผ ์๋ง๊ฒ ๋ฐ๊พธ๊ฑฐ๋ traversingํ ๋ฐฐ์ด์ ๋๋๊ฑฐ๋ ํฉ์น๋ ๋ฑ ๋ค์ํ technique ์ดํ two-pointer approach๋ฅผ ์ค์ํ๋ค. ์ง์ ์ฌ๋ฌ ๋ฌธ์ ๋ํ ์ ํ์ ๋ณด๋ฉด์ ์ด๋ป๊ฒ ํด๋น ์ ๊ทผ๋ฒ์ ์ฌ์ฉํ๋์ง ์ต์ํด์ง์.
examples
๐ก <BOJ S3 3273 ๋ ์์ ํฉ>
Q. ์๋ก ๋ค๋ฅธ ์์ ์ ์๋ก ์ด๋ฃจ์ด์ง ํ ๊ฐ์ array์์ ์๋ก ๋ค๋ฅธ ๋ ์์ ์ ์์ ํฉ์ด X๊ฐ ๋๋ ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ → โ ๋ฐฐ์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ / โก x๋ ๋งจ ์ผ์ชฝ, y๋ ๋งจ ์ค๋ฅธ์ชฝ ๋ฐฐ์น / โข ๋ ํฌ์ธํฐ๊ฐ ๊ฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์์ ํฉ์ด X๋ณด๋ค ํฌ๋ค๋ฉด y-=1, X์ ๋ง๋ค๋ฉด x+=1, y-=1, X๋ณด๋ค ์๋ค๋ฉด x+=1
๐ก <BOJ S4 2003 ์๋ค์ ํฉ 2 >
Q. n๊ฐ์ ์๋ก ๋ ์์ด์์ i๋ฒ์งธ๋ถํฐ j๋ฒ์งธ ์๊น์ง์ ํฉ์ด M์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ (์์ด์ด๋ฏ๋ก array ๋ณํ ๋ถ๊ฐ) → โ x์ y ๋ชจ๋ ๋ฐฐ์ด ๋งจ ์ผ์ชฝ ์์น / โก x๋ ๊ณ ์ ํ ์ํ์์ ๋์ ํฉ์ด M์ด์์ด ๋๊ธฐ ์ ๊น์ง y ์ด๋, ๋์ ํฉ์ด M์ด๋ผ๋ฉด ans += 1, ๊ทธ ๋ค์ x+=1
(๋ถ๋ถ ์์ด์ ํฉ A[i] ~ A[j]๋ผ๊ณ ๊ณ ์ ํด ๋์๊ธฐ์ ๋์ ํฉ์ผ๋ก ๋ฐ๋ก ๋๋๊ณ ํฌ ํฌ์ธํฐ ์ฐ๋ฉด ๋๋ ์ฌ์ด ๋ฌธ์ )
๐ก <BOJ S3 2559 ์์ด >
Q. n๊ฐ์ ์ฐ์๋ ์จ๋๋ก ์ด๋ฃจ์ด์ง ์์ด์์ k๊ฐ์ ๋ถ๋ถ์ฐ์์์ด ์ต๋ ๋์ ํฉ ๊ตฌํ๋ ๋ฌธ์ (์์ด์ด๋ฏ๋ก array ๋ณํ ๋ถ๊ฐ) → x์ y๋ชจ๋ ๋ฐฐ์ด ๋งจ ์ผ์ชฝ ์์น / x๋ ๊ณ ์ ํ ์ํ์์ ๋์ ํฉ์ ๊ฐ์๊ฐ k๊ฐ ์ด์์ด ๋๊ธฐ ์ ๊น์ง y ์ด๋ / cnt==K๋ผ๋ฉด ans update์ ํจ๊ป ๋์ ํฉ-=l[x], cnt-=1ํ๊ณ x ์ค๋ฅธ์ชฝ ์ด๋ (๋ง์ฝ cnt<K์ฌ์ y๊ฐ ๋ฐฐ์ด ์ค๋ฅธ์ชฝ ๋๊น์ง ๋ค ์ด๋ํด ๋ ์ด์ k๊ฐ์ ๋์ ํฉ์ ๊ตฌํ ์ ์๋ค๋ฉด break)
(k๊ฐ์ ์์๋ก ์ด๋ฃจ์ด์ง ๋ถ๋ถ์ฐ์์์ด ๋์ ํฉ์ด๋ผ๊ณ i, j ํฌ ํฌ์ธํฐ ์ฌ์ฉ์ ์๋ช )
๐ก <BOJ S4 1940 ์ฃผ๋ชฝ>
Q. ๊ณ ์ ํ ๋ฒํธ๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ท๋ค ์ค ๋ ๊ฐ ๊ฐ์ท์ ๊ณจ๋ผ M์ด ๋๋ ๊ฒฝ์ฐ์ ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ (์ 3273 ๋ ์์ ํฉ๊ณผ ๋์ผ) (๋ค๋ง N์ด 15000 ์ดํ๋ผ ํฌ ํฌ์ธํฐ ์์จ๋ ๋๋ ๋ฌธ์ )
๐ก <BOJ S1 2531 ํ์ ์ด๋ฐฅ + G4 15961 ํ์ ์ด๋ฐฅ>
Q. ํฌ ํฌ์ธํฐ ์ค ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๋ํ ์ ํ. x๊ฐ ์ ์ฒด ์ด๋ฐฅ์ ๋๋ฉด์ ๊ณ ์ ์๋์ฐ ๋ด์ ์ฟ ํฐ ์ฌ๋ถ์ ๋ฐ๋ผ ๋จน๋ ์ด๋ฐฅ ๊ฐ์ +1 ๋๋ +0. ์๋์ฐ๊ฐ ๋๋ฉด์ ๋จน์ ์ ์๋ ์ด๋ฐฅ ์ต๋๊ฐ ๊ตฌํ๋ ๋ฌธ์ . x์ y๋ชจ๋ ์ฒซ ์ด๋ฐฅ๋ถํฐ ์์. y๋ index 0 ๊ธฐ์ค (N-1+k)๊น์ง traverse
๐ก <BOJ G4 1806 ๋ถ๋ถํฉ>
Q. ํฌ ํฌ์ธํฐ ๋ํ ์ ํ. ๊ณ ์ ์์ด์์ x์ y ๋ชจ๋ ์ผ์ชฝ index ๋ถํฐ ์์. ๋ถ๋ถํฉ์ด๋ฏ๋ก x 0๋ถํฐ ๋๋ฉด์ y๊ฐ ๋ถ๋ถํฉ S์ด์์ด ๋ ๋๊น์ง ์งํ. ์ดํ x๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ณ , y๋ ํ์ฌ ์์น์์ ๋ฐ๋ณต์ ์ผ๋ก S์ด์์ด ๋ ๋๊น์ง ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ. ํฌ ํฌ์ธํฐ ์ ํ์ธ ์ด์ ๋, S์ด์์ธ ๋ถ๋ถํฉ ์์ด์์, ์๋ก์ด x์ผ๋ y๊ฐ ๊ตณ์ด 0๋ถํฐ ๋ ํ์ x. ์ด์ฐจํผ S๋ณด๋ค ์์ผ๋ฏ๋ก. ์ด ๋ length๊น์ง ์ถ๊ฐ๋ก update
๐ก <BOJ G3 1644 ์์์ ์ฐ์ํฉ >
Q. ์์๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์์ ๋ถ๋ถ์ฐ์์์ด ๋์ ํฉ์ด N์ธ์ง ์์๋ณด๋ ๋ฌธ์ . ์๋ผํ ์คํ ๋ค์ค ์ฒด๋ก ์์๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๊ตฌํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ์ ๋ถ๋ถํฉ์์ ๊ตฌํ๋ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋์ผ
๐ก <BOJ G5 2470 ๋ ์ฉ์ก / G5 2467 ์ฉ์ก>
Q. ๋ ๋ฌธ์ ์ฐจ์ด๋ ์ฃผ์ด์ง ๋ฐฐ์ด์ด ์ ๋ ฌ์ธ์ง ์๋์ง. ์ ๋ ฌ์ ํด์ผ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ ๊ฐ๋ฅ. ๋ ์ฉ์ก์ ๋ํ ๊ฒฐ๊ณผ๊ฐ 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ๊ตฌํ๋ ๋ฌธ์ . x๋ ์ผ์ชฝ, y๋ ์ค๋ฅธ์ชฝ๋ถํฐ ์์ํด์, ๋ ์ฉ์ก์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ์์๋ผ๋ฉด y๋ฅผ ์ผ์ชฝ์ผ๋ก, ์์๋ผ๋ฉด x๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋.
๐ก <BOJ G3 2473 ์ธ ์ฉ์ก>
Q. ์ด์ ๋ ์ฉ์ก์ด ์๋ ์ธ ์ฉ์ก์ ํฉ์ด 0์ ๊ฐ๊น์ด ์์ ์ฐพ๋ ๋ฌธ์ . N<=5,000์ด์ด์ x ํ๊ฐ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ก๊ณ ๋๋จธ์ง ์ฉ์ก๋ค์ ํฌ ํฌ์ธํฐ๋ก ๋ ์ฉ์ก ํ์ด ๊ทธ๋๋ก ์ ์ฉํด O(nlogn+n*(n+n))์ ํด๊ฒฐ ๊ฐ๋ฅํ๋, x๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ฉด์ x,y,z์ ์ ๊ฒ ์ ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํด y์ z๋ฅผ 0~N-1์ ๋ฒ์๊ฐ ์๋, x+1~N-1์ ๋ฒ์๋ก ์ข ๋ ์๊ฐ ๋จ์ถ ๊ฐ๋ฅ (์๊ฐ๋ณต์ก๋๋ ๋์ผ)
๐ก <BOJ G4 13144 List of Unique Numbers>
Q. ๊ณ ์ ์์ด์์ ๊ฐ์ ์๊ฐ ์ฐ์ํด์ ๋ฑ์ฅํ์ง ์๋ ๋ถ๋ถ์ฐ์์์ด์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ . x,y ๋ชจ๋ index 0 ์ผ์ชฝ ์์. x๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํํ๋ฉด์ y๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํํ, ์ด๋ฏธ ์ค๋ณต ์ ๋ฌด๋ฅผ checkํ์์ผ๋ฏ๋ก, ๊ทธ์ ans์ (y-x) ๊ฐ์๋ง ๋ํด์ฃผ๊ธฐ. ๊ฒฐ๋ก ์ ์ผ๋ก x์ y๋ชจ๋ ํ๋ฐํด๋ง ๋ ์ ์๋ ์๊ฐ๋ณต์ก๋ O(N+N) ํด๊ฒฐ ๊ฐ๋ฅ. ํฌ ํฌ์ธํฐ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ ค์ผ ํ๋ ๋ฌธ์
'Computer Science > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ผTower of Hanoi (0) | 2024.04.09 |
---|---|
โMerge Sort (0) | 2024.04.06 |
๐ฆ Pigeonhole Principle (0) | 2024.02.02 |
๐ Backtracking (0) | 2024.01.18 |
๐งฟ Dijkstra's (Shortest Path) Algorithm (1) | 2024.01.14 |
๋๊ธ