ํฌ ํฌ์ธํฐ & ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ
1์ฐจ์ ๋ฐฐ์ด์ 2ํ ์ด์ ๋ฐ๋ณต์ ์ผ๋ก ํ์์ ํด์ผํ ๊ฒฝ์ฐ ๋จ์ํ๊ฒ ํ๋ค๋ฉด O(N^2) ์ด์ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฌ์ง๋ง ํฌ ํฌ์ธํฐ์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ถ๋ถ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ O(N)์ผ๋ก ์ค์ผ ์ ์๋ ๊ณตํต์ ์ด ์๋ค.
ํฌ ํฌ์ธํฐ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๋ณํ ์ ์์ง๋ง, ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ณ ์ ์ ์ด๋ผ๋ ์ฐจ์ด์ ์ด ์๋ค.
ํฌ ํฌ์ธํฐ(Two Pointer)
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ 1์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ๊ฐ ๋ค๋ฅธ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ 2๊ฐ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํด๊ฐ๋ฉด์ ์ํ๋ ๊ฒ์ ์ป๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ด๋ฌํ ํน์ฑ ๋๋ฌธ์ ํฌ ํฌ์ธํฐ๋ ์ฐ์๋๊ณ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ ์ธ ๋ถ๋ถ ๋ฐฐ์ด๋ค์ ํ์ฉํ์ฌ ํน์ ์กฐ๊ฑด์ ์ผ์น์ํค๋ ๋ฌธ์ ์ ์ ์ฉ์ํฌ ์ ์๋ค.
ํฌ ํฌ์ธํฐ๋ก ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์์๋ ๋ชจ๋ ๋ฐฐ์ด๋ค์ ๊ฐ๋ค์ ๋ชจ๋ ํ์ํ์ฌ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์, ํน์ ์ต์ , ์ต๋ ๊ฐ ๋ฑ์ ์ฐพ๋ ๋ฌธ์ ๊ฐ ์๋๋ฐ, ์ด๋ฅผ ‘์กฐํฉ', ‘๋ฐฑํธ๋ํน'์ผ๋ก ํผ๋ค๋ฉด ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฒ์ด๋ ์ ์๋ค.
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ ๊ฐ์ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋ณดํต (start, end) ๋๋ (left, right)๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ์ง ์ ํ์ด ์กด์ฌํ๋ค.
- 2๊ฐ์ ํฌ์ธํฐ ๋ณ์ ์์์ ์ด ๋ฐฐ์ด์ ์์์ ์ธ ๊ฒฝ์ฐ.
- ์ ๋ ฌ๋ ๋ฐฐ์ด ์์์ 2๊ฐ์ ํฌ์ธํฐ ๋ณ์๊ฐ ๊ฐ๊ฐ ์์์ ๊ณผ ๋์ (arr.length-1)์ ์์นํ ๊ฒฝ์ฐ
์ฒซ๋ฒ์งธ ์ ํ์ผ๋ก ํฉ์ด T์ธ ๋ถ๋ถ ๋ฐฐ์ด์ ์ฐพ๋๋ค๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
- start = end = 0, sum = arr[0]์ผ๋ก ์ด๊ธฐํ ํ๋ค.
- while(start≤end) ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋ง๋ ๋ค.
- sum๊ณผ T๊ฐ์ ๋น๊ตํ๋ค.3.2. sum > T๋ผ๋ฉด, sum-= arr[start] ํด์ฃผ๊ณ , start+1์ ํด์ค์ ๋ถ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ฐ์์์ผ์ ํฉ์ ๊ฐ์์์ผ์ค๋ค.
- 3.3. sum == T ์ด๋ฉด ๋!
- 3.1. sum < T ๋ผ๋ฉด, end๋ฅผ +1 ํด์ค์ ๋ถ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ฆ๊ฐ ์์ผ์ฃผ๊ณ sum += arr[end]๋ก ํฉ์ ์ฆ๊ฐ์์ผ์ค๋ค.
์ด ๋ start์ end๊ฐ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ด๊ณผํ์ง ์๋๋ก ์กฐ๊ฑด๋ฌธ์ ํ๋์ฉ ๋ ์ถ๊ฐํด์ค์ผ ํ๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window)
์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ์ ํฌ ํฌ์ธํฐ์ ์ ์ฌํ์ง๋ง, ๋ถ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ณ ์ ํด์ ํ์ํ๋ ๋ฐฉ์์ด๋ค. ํฌ ํฌ์ธํฐ์ ๋ฌ๋ฆฌ ๋ ๊ฐ์ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ฌ์ฉํ ํ์์์ด ๊ณ ์ ์ ์ธ ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ํ ๊ฐ์ ํฌ์ธํฐ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๋ถ๋ถ ๋ฐฐ์ด์ ์ ๋์ ์ ์ ์๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ
- ๊ณ ์ ๊ธธ์ด l๊ณผ ์์ ์ง์ ํฌ์ธํฐ p = 0์ผ๋ก ์ด๊ธฐํํ๋ค.
- p๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด์ (๋ฐฐ์ด ๊ธธ์ด - l - 1 )๊น์ง ํ์ํ๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ๊ธธ์ด๊ฐ ๊ณ ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
'Algorithm > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ต์ ์คํจ๋ ํธ๋ฆฌ_ Kruskal & Prim (0) | 2022.05.22 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ _๋ค์ต์คํธ๋ผ & ๋ฒจ๋งํฌ๋ (0) | 2022.05.20 |