Skip to content

Commit

Permalink
Merge pull request #52 from fkdl0048/51-task-unseen-코테-준비
Browse files Browse the repository at this point in the history
UNSEEN 코테 준비
  • Loading branch information
fkdl0048 authored Jun 21, 2024
2 parents 2d827b5 + dd8fa06 commit 08da1a5
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 0 deletions.
1 change: 1 addition & 0 deletions Algorithm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
- [String](./String/README.md)
- [Dynamic Programming](./DynamicProgramming/README.md)
- [Graph](./Graph/README.md)
- [TowPointer](./TowPointer/README.md)

## 참고

Expand Down
75 changes: 75 additions & 0 deletions Algorithm/Sort/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,4 +253,79 @@ namespace Sort
}
}
}
```

## 좌표정렬 (STL 정렬 활용 예시)

- vector를 사용한 정렬

```cpp
#include <bits/stdc++.h>

using namespace std;

int main() {
int n;
cin >> n;
int p1, p2;
vector<pair<int, int>> s;

for (int i = 0; i < n; i++)
{
cin >> p1 >> p2;
s.push_back(make_pair(p1, p2));
}

sort(s.begin(), s.end());

for(auto p : s)
{
cout << p.first << " " << p.second << '\n';
}
}
```

기본적으로 정렬은 위와 같이 수행되지만, 추가적인 조건을 설정하기 위해선 bool을 반환하는 compare함수를 인자로 넣어주면 된다.

```cpp
#include <bits/stdc++.h>

using namespace std;

bool compare(pair<int, int> a, pair<int, int> b){
if (a.second == b.second)
return a.first < b.first;
else
return a.second < b.second;
}

int main()
{
int n;
int p1, p2;
vector<pair<int, int>> v;

cin >> n;
for (int i = 0; i < n; i++)
{
cin >> p1 >> p2;
v.push_back(make_pair(p1, p2));
}

sort(v.begin(), v.end(), compare);

for (int i = 0; i < n; i++)
cout << v[i].first << ' ' << v[i].second << '\n';
}
```
이처럼 정렬에 특수한 조건을 달 수 있디. 람다형식으로도 사용 가능.
```cpp
sort(v.begin(), v.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
if (a.second == b.second)
return a.first < b.first;
else
return a.second < b.second;
});
```
48 changes: 48 additions & 0 deletions Algorithm/TowPointer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Two Pointer

알고리즘 문제에서 자주 출제되는 형식으로 배열에서 포인터 2개를 조작함으로써 좀 더 효과적으로 풀이할 수 있는 알고리즘이다.

## [배열 합치기 예시](https://www.acmicpc.net/problem/11728)

가장 쉽게 접할 수 있는 문제로 1회차 때 무식하게 벡터나 배열로 푼다면 시간초과가 뜨는 문제이다.

이를 위해 투 포인터를 활용할 수 있다.

```cpp
#include <bits/stdc++.h>

using namespace std;

int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

int n, m;
int aIndex = 0, bIndex = 0;

cin >> n >> m;

int a[n + 1], b[m + 1];

for (int i = 0; i < n; i++)
cin >> a[i];

for (int i = 0; i < m; i++)
cin >> b[i];

while (aIndex < n && bIndex < m)
{
if (a[aIndex] <= b[bIndex])
cout << a[aIndex++] << " ";
else
cout << b[bIndex++] << " ";
}

while (aIndex < n)
cout << a[aIndex++] << " ";
while (bIndex < m)
cout << b[bIndex++] << " ";
}
```

0 comments on commit 08da1a5

Please sign in to comment.