2023. 5. 20. 19:50, 알고리즘/BOJ
#include <bits/stdc++.h>
using namespace std;
string st[20'005];
bool cmp(const string& a, const string& b){
int lena=a.size(),lenb=b.size();
if(lena!=lenb) return lena<lenb;
return a<b;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
for(int i=0; i<n; i++) cin>>st[i];
sort(st,st+n,cmp);
for(int i=0; i<n; i++){
if(i==0||st[i-1]!=st[i]) cout<<st[i]<<'\n';
}
}
내가 작성한 함수는 이렇게 cmp함수를 위에 따로 작성해서 sort에 넘겨주었고, 참고용 정답 코드를 보았을때의 표현을 보면
// Authored by : tongnamuu
// Co-authored by : -
// http://boj.kr/e365634189b1497a95abaf856df7758f
#include <bits/stdc++.h>
using namespace std;
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
vector<string>a(n);
for(int i=0;i<n;++i) cin>>a[i];
sort(a.begin(), a.end(), [](const string& u, const string& v){
int ul = u.length();
int vl = v.length();
if(ul!=vl) return ul < vl;
return u < v;
});
a.erase(unique(a.begin(), a.end()), a.end()); // a에서 중복된 원소를 제거하는 명령
for(string& s : a) cout<<s<<'\n';
return 0;
}
이렇게 바로 sort 함수 내부에 람다식을 이용해서 함수를 박아넣었다. 직렬함수?
그래서 이와 관련하여서 한번 검색을 해보았다.
이렇게 작성해서 결국 얻을 수 있는 이점은, 간단한 함수를 작성하여서 특정한 함수의 인자로 전달할때, 바로 그 전달받아야 하는 위치에 람다표현식을 통해서 함수를 정의해서 표현해주고, 함수의 정의도 바로 그 위치에서 확인할 수 있어서 코드의 가독성과 유지보수성을 향상시킬 수 있다고 한다.
sort를 활용해서 compare함수를 넘겨주어서 문제를 해결할때, 만약 compare함수가 간단한 형태이면 이렇게 람다표현식을 통해서 바로 인라인으로 작성하면 충분하게 가독성을 해치지 않으면서 유지보수성을 향상시킬 수 있을것 같다.
[]을 활용하여서 람다 표현식의 선언부를 나타내고 한번 함수를 삽입해보도록 하자.
그리고 앞으로 이러한 표현을 만나면 []부터 함수의 선언부임을 명확하게 인지하고 해석을 잘 해보도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 10814번. stable_sort()를 활용하지 않고 sort()를 사용해서 먼저 입력된 순서를 보존하는 방법. (0) | 2023.05.21 |
---|---|
boj 1181번 문제를 통해 접하게된 erase(),unique()를 활용한 중복 요소 제거 방법. (0) | 2023.05.20 |
boj 5648 역원소 정렬을 통해 배우게된 reverse의 활용과 stoll함수에 관하여 (0) | 2023.05.20 |
bitshift를 이용해서 큰 값을 표현할때의 주의점. 1<<62 (0) | 2023.05.20 |
c++ long long 으로 표현할 수 있는 수에 관하여. boj 11652번 문제 연관 (0) | 2023.05.19 |
Comments, Trackbacks