2023. 5. 16. 19:02, 알고리즘/BOJ
// Authored by : hgmhc
// Co-authored by : BaaaaaaaaaaarkingDog
// http://boj.kr/9e42012f919544dfa94544e08b2ee1fe
#include <bits/stdc++.h>
using namespace std;
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n;
pair<int,string> x[n];
for (auto& s : x) cin >> s.first >> s.second;
stable_sort(x, x+n, [&](pair<int,string> a, pair<int,string> b) {
return a.first < b.first;
});
for (auto p : x) cout << p.first << ' ' << p.second << '\n';
}
/*
13 to 15번째 줄의 코드가 낯설면 람다 함수 키워드로 구글링 추천
*/
이 코드를 접하게 되었고, 이때 지속적으로 pair<int,string> x[n]; 에서, x[n]에서 '식에 상수 값이 있어야 합니다' 오류를 발생하고 그리고 애초부터 그동안 pair<int,string> x[n]; 형태로 pair<int,string> 타입의 배열 x를 런타임중에 받은 n이라는 변수로 배열사이즈를 정해서 사용하는 문법을 처음 보았기 때문에 이에 대해서 검색해보았다.
https://int-i.github.io/cpp/2020-05-10/vla/
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hirit808&logNo=221447722807
결국 위의 문법은 가변 길이 배열(variable length array) 라고 하며, c99 표준에서는 허용되었지만 c++에서는 허용되지 않는다고 한다. 이것도 컴파일러마다 허용할수도 있고 아닐수도 있고 한것 같은데, 일단 이런 경우는 사용하지 않는것이 좋을것 같다. 지피티에 검색해보아도 vector를 이용하는 방법으로 변환해서 알려주는걸 보니 애초부터 익숙해지지말고, 이런 문법이 있다는것만 파악한뒤에 vector를 이용한 풀이로 코드를 작성해야겠다.
그리고 위에 첨부한 풀이는 결국 람다 문법을 활용해서 함수 자체를 compare 함수를 넣는 위치에 그대로 삽입해서 작성한것으로 보여지고, 위에 따로 빼서 compare 함수를 만들면 결국 동일한 형태의 코드가 될것으로 보여진다.
'알고리즘 > BOJ' 카테고리의 다른 글
sort(), stable_sort()에서, 첫번째, 두번째 인자까지 고려해준다는걸 잊지말고 사용하자. (0) | 2023.05.16 |
---|---|
const와 &의 사용에 관하여. (0) | 2023.05.16 |
boj 10814번 문제를 풀면서 만나게된 stl sort()의 stable과 unstable, 그리고 stl stable_sort()에 관하여. (0) | 2023.05.16 |
sort() 함수를 내림차순으로 이용하는 방법. (0) | 2023.05.16 |
in-place sort에 관하여. 약간 말그대로의 해석 느낌. (0) | 2023.05.16 |
Comments, Trackbacks