Skip to content

Commit aaa734e

Browse files
authored
Create Two Pointer Algorithm.md
1 parent 28b3738 commit aaa734e

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Two Pointer Algorithm)
2+
3+
### ์ •์˜
4+
๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ตฌ๊ฐ„์„ ์ฐพ๊ฑฐ๋‚˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
5+
๋Œ€๊ฐœ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐฐ์—ด์˜ ์‹œ์ž‘๊ณผ ๋ ์ง€์ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์Œ
6+
7+
---
8+
9+
### ๋™์ž‘ ๋ฐฉ์‹
10+
1. ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ, ๊ฐ๊ฐ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‹œ์ž‘๊ณผ ๋ ์ง€์ ์— ์œ„์น˜์‹œํ‚ด
11+
2. ๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ
12+
3. ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ตฌ๊ฐ„์„ ํƒ์ƒ‰
13+
4. ๋ชจ๋“  ์กฐ๊ฑด์ด ๋งŒ์กฑํ•  ๋•Œ๊นŒ์ง€ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณต
14+
15+
---
16+
17+
```C++
18+
19+
#include <iostream>
20+
#include <vector>
21+
using namespace std;
22+
23+
// ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ์ด target์ด ๋˜๋Š” ๋‘ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜
24+
vector<int> twoSum(vector<int>& nums, int target) {
25+
int left = 0; // ์™ผ์ชฝ ํฌ์ธํ„ฐ ์ดˆ๊ธฐํ™”
26+
int right = nums.size() - 1; // ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ ์ดˆ๊ธฐํ™”
27+
28+
while (left < right) {
29+
int sum = nums[left] + nums[right]; // ํ˜„์žฌ ๋‘ ์š”์†Œ์˜ ํ•ฉ ๊ณ„์‚ฐ
30+
if (sum == target) {
31+
return {left, right}; // ํ•ฉ์ด target๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
32+
} else if (sum < target) {
33+
left++; // ํ•ฉ์ด target๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
34+
} else {
35+
right--; // ํ•ฉ์ด target๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
36+
}
37+
}
38+
39+
// ํ•ฉ์ด target๊ณผ ์ผ์น˜ํ•˜๋Š” ๋‘ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋นˆ ๋ฒกํ„ฐ ๋ฐ˜ํ™˜
40+
return {};
41+
}
42+
43+
int main() {
44+
vector<int> nums = {2, 7, 11, 15};
45+
int target = 9;
46+
47+
vector<int> result = twoSum(nums, target);
48+
49+
if (result.size() == 2) {
50+
cout << "Indices of the two elements whose sum is equal to target:" << endl;
51+
cout << result[0] << " " << result[1] << endl;
52+
} else {
53+
cout << "No such elements found!" << endl;
54+
}
55+
56+
return 0;
57+
}
58+
59+
```
60+
61+
---
62+
63+
### ์‹œ๊ฐ„ ๋ณต์žก๋„
64+
65+
> ์ผ๋ฐ˜์ ์œผ๋กœ **O(n)** ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง
66+
67+
ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ฃผ๋กœ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด์— ์„ ํ˜•์ ์œผ๋กœ ์˜์กด
68+
69+
---
70+
71+
### ์žฅ์ 
72+
- ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์„ ํ˜• ์‹œ๊ฐ„์— ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ 
73+
- ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
74+
75+
---
76+
77+
### ๋‹จ์ 
78+
- ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฃผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€
79+
- ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ์ƒํ™ฉ์— ์ ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
80+
81+
82+
83+
84+
85+
86+
## ์ฐธ๊ณ 
87+
88+
- [ํˆฌ ํฌ์ธํ„ฐ(Two Pointers Algorithm), ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(Sliding Window) (์ˆ˜์ •: 2019-09-09)](https://m.blog.naver.com/kks227/220795165570)

0 commit comments

Comments
ย (0)