본문 바로가기

Algorithm/Lecture

알고리즘 풀이를 위한 C/C++/STL 기초 정리 - STL(2)편

## // C/C++/STL 기초

 

[https://docs.google.com/document/d/1xrhb-6Vm5_0zd2iImbdg_4kN2cTnY-ZSzyrFAavwABI/edit?usp=sharing](https://docs.google.com/document/d/1xrhb-6Vm5_0zd2iImbdg_4kN2cTnY-ZSzyrFAavwABI/edit?usp=sharing)

 

Algorithm Note - 1. C/C++/STL

// C/C++/STL 기초 ------------------------------------------------------------------------------------------ C언어 //1.1 포멧 문자열 int %d 10진수 %x 16진수 %o 8진수 long long %lld %I64d char %c char* %s float %f double %lf long double %Lf //1.2 TestCase 또는 EOF 받기 //Tets

docs.google.com

 

Sec5. STL 2- Algorithm

 

#include<algorithm> : 명심 왠만해서는 범위는 [begin,end) 이다..

 

//#5.1 카운팅 - 조건에 맞는, 원소 수 반환 O(N)

count(begin,end,value);

count_if(begin,end,p);

 

//#5.2 위치 찾기 - 조건에 맞는 원소 위치 반환 O(N)

find(begin,end,value);

find_if(begin,end,p); //없으면 end() 반환

 

//#5.3 원소들 (조건에 맞으면 ) 값으로 채우기

fill(begin,end,value);

 

//#5.4 뒤집기

reverse(begin,end);

 

//#5.5 회전하기

rotate(begin,mid,end);

[mid,end)를 앞으로, [begin,mid)를 뒤로 위치 바꾸기.

rotate(begin,begin+1,end); //오른쪽으로 한칸씩 이동하기

rotate(begin,end-1,end); //왼쪽으로 한칸씩 이동하기

 

---

 

//#5.6 swap

swap(a,b) // int,vector<int>

swap(_(v.begin()), _(v.begin()+1) ); // 범위가 아닌, 선택이다.!!

 

//#5.7 unique 구간에서 연속된 값을 제거하고 하나만 만들고 다시 넣는다.

정렬 -> 유니크 -> erase

vector<int> v;

v.sort(); // 1.정렬

auto it = v.unique(v.begin(),v.end()); //2. 유니크

erase(it,v.end()); // 3. 잔존 지우기

 

//#5.8 정렬 sort

 

sort(begin,end);

sort(begin,end,cmp);

 

sort(begin,end,greater<int>());

sort(begin,end,cmp);

bool cmp(const int& u, const int& v){return u > v ;}

sort(begin,end,[](const int& u,const int& v){return u > v; });

 

eg)pair를 이용한 람다 정렬, 문자열 -> 우선 길이 내림차, 긜고 사전 오름차

sort(s.begin,s.end,[](const string& u,const string& v){

return make_pair(-u.size(),u) < make_pair(-v.size(),v) ;} );

 

eg) 구조체나 클래스는 sort시 함수를 작성해 주어야 함. 내부 함수 또는 cmp 외부 함수 작성.

 

//#5.8.2 정렬 stable_sort 같으면 정렬전 순서가 유지됨.

stable_sort(begin,end);

stable_sort(begin,end,cmp);

 

//#5.9 이진 탐색, 보통 커스터 직접 만드는 경우가 흔한데,

binary_search(begin,end,value); //true or false

binary_search(begin,end,value,cmp); // true or false

 

---

 

//#5.10 최대값 최솟값 찾기

 

min(2,3); max(2,3);

min({1,2,3,4}); max({1,2,3,4});

min(p1,p2,cmp); max(p1,p2,cmp);

 

eg) 가장 작은 문자열 출력

min(s1,s2,[](string u,string v){ return u.size() < v.size(); });

 

minmax -> min과max를 pair형태로 반환

 

min_element(begin,end);

min_element(begin,end,cmp);

//최대 및 최소값의 이터레이터 반환.

 

eg) 정렬 -> min_element

 

    vector<string> ss = { "a","ab","abc","abcd"};

    auto it = min_element(ss.begin(),ss.end(),[](string u, string v){return u.size() < v.size();});

    cout<<*it;

 

//#5.11 값 비교, 후 크거나 같은 첫 iterator 찾기

 

lower_bound(begin,end,val); // val 보다 크거나 같은 첫 iterator

lower_bound(begin,end,val,cmp);

upper_bound(begin,end,val); //val 보다 큰 첫 iterator

upper_bound(begin,end,val,cmp);

 

//#5.12 순열

 

next_permutation(v.begin(),v.end()); //다음 순열

prev_permutation(v.begin(),v.end()); //이전 순열

 

 

DOS IMPACT - WEB Developer

KIM DO YOUNG

WEB : REACT JS | REACT NATIVE | GraphQL PRISMA