[์๊ณ ๋ฆฌ์ฆ] ํฌํฌ์ธํฐ
1. ํฌํฌ์ธํฐ(Two Pointers)
- ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ฉด์ ๋ ํฌ์ธํฐ ๊ตฌ๊ฐ์ ๊ฐ์ด
ํ๊ฒ ๊ฐ๊ณผ ๊ฐ์ ๋๊น์ง ํฌ์ธํฐ๋ฅผ ์กฐ์ํ๋ ๊ธฐ๋ฒ์ด๋ค.
→ ๋ณดํต l(left), r(right) ๋๋ s(start), e(end) ๊ฐ์ ์์ผ๋ก ํฌ์ธํฐ์ ์ด๋ฆ์ ๋ถ์. - ์ ๋ ฌ๋์ด์๋ ๋ ๋ฆฌ์คํธ์ ํฉ์งํฉ์๋ ์ฌ์ฉ
- ํฉ๋ณ์ ๋ ฌ์ counquer ์์ญ์ ๊ธฐ์ด๊ฐ ๋๊ธฐ๋ ํจ
- ์๊ฐ ๋จ์ถ
1-1. ํฌ์ธํฐ ๋ฐฉ์
- ๋งจ ์ฒ์ ๋ ํฌ์ธํฐ๋ 0์์ ์์, start <= end ๋ฅผ ๋ง์กฑํด์ผํจ.
- ๋ถ๋ถํฉ ๋ฐฐ์ด์ ํฉ < ๊ตฌํด์ผํ๋ ๊ฐ
→ end๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ์ฌ ๋ถ๋ถํฉ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํด - ๋ถ๋ถํฉ ๋ฐฐ์ด์ ํฉ >= ๊ตฌํด์ผํ๋ ๊ฐ
→ start๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ์ฌ ๋ถ๋ถํฉ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ฐ์์ํด - ์ ๊ณผ์ ์ start ์ธํ ์ค๊ฐ (๋ฆฌ์คํธ ํฌ๊ธฐ-1)์ด ๋ ๋๊น์ง ๋ฐ๋ณต
2. ํฌํฌ์ธํฐ ์์ ๋ฐ ํ์ด(๋ฐฑ์ค 2003๋ฒ : ์๋ค์ ํฉ2)
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 2, 5, 3, 1, 1, 2}; // ํฌ๊ธฐ๊ฐ 10์ธ 1์ฐจ์ ๋ฐฐ์ด
int m = 5; // ์ฐ์๋ ๊ตฌ๊ฐ์ ํฉ์ด 5์ธ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
int count = twoPointers(arr, m);
}
private static int twoPointers(int[] arr, int m) {
int sum = 0, count = 0;
int left = 0, right = 0;
while (true) {
if (sum > m) { // 1. left๋ฅผ ์ฐ์ธก์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒฝ์ฐ
sum -= arr[left++];
} else if (right == arr.length - 1) {
// right๋ฅผ ์ฐ์ธก์ผ๋ก ์ฎ๊ธฐ๊ธฐ ์ ์ ๋ฐฐ์ด์ ๋์ ๊ฐ๋ฆฌํค๋์ง ํ์ธํ๋ค.
break;
} else { // 2. right๋ฅผ ์ฐ์ธก์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒฝ์ฐ
sum += arr[right++];
}
if (sum == m) count++;
}
return count;
}
}
GitHub - WooVictory/Ready-For-Tech-Interview: ๐ป ์ ์ ๊ฐ๋ฐ์๋ก์ ์ค๋น๋ฅผ ํ๊ธฐ ์ํด ์ง์์ ์ ๋ฆฌํ๋ ๊ณต๊ฐ
๐ป ์ ์ ๊ฐ๋ฐ์๋ก์ ์ค๋น๋ฅผ ํ๊ธฐ ์ํด ์ง์์ ์ ๋ฆฌํ๋ ๊ณต๊ฐ ๐จ๐ป. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.
github.com
์ฐธ๊ณ ) https://ssungkang.tistory.com/entry/Algorithm-Two-Pointers-%ED%88%AC-%ED%8F%AC%EC%9D%B8%ED%84%B0
[Algorithm] Two Pointers, ํฌ ํฌ์ธํฐ
์ด๋ฒ ํฌ์คํ ์์๋ Two Pointers์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. Two Pointers ๋ 1์ฐจ์ ๋ฐฐ์ด์์ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ
ssungkang.tistory.com
์ฐธ๊ณ ) https://www.lifencoding.com/algorithm/13?p=1
[Algorithms] ํฌ ํฌ์ธํฐ(Two Pointers) ์๊ณ ๋ฆฌ์ฆ
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ํ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ํฌ์ธํฐ๋ ์ฝ๊ฒ ๋งํด ๋ง์ฐ์ค ํฌ์ธํฐ์ ๊ฐ์ด ์์น๋ฅผ ํ์ํ๋ ๊ฒ์ด๋ค. ํฌ ํฌ์ธํฐ๋ ์์๊ณผ ๋ ๋๋ ์ผ์ชฝ๊ณผ
www.lifencoding.com
์ฐธ๊ณ ) https://www.acmicpc.net/problem/2003
2003๋ฒ: ์๋ค์ ํฉ 2
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ A[1], A[2], …, A[N]์ด ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ A[x]๋ 30,000์ ๋์ง ์๋ ์์ฐ์์ด๋ค.
www.acmicpc.net