문자열 내 마음대로 정렬하기

NJW·2021년 8월 19일
0

코테

목록 보기
62/170

들어가는 말

미리 답을 보는 걸 좋아하지는 않지만, 도저히 문제 감을 못 잡아서 미리 답을 봤... 다... ㅎㅎ. 헤헷... 덕분에 sort()의 기능을 확실하게 알았다. 비록 풀이는 100% 내 실력은 아니지만, sort()에 대해 이해했으니 된 거 아니오! 히힛...

코드 설명

sort함수를 썼다. 예전에도 몇 번 쓰고 싶었는데, 자꾸만 실패하길래 뭐지 했더니 문제는 세 번째 인자에 있었다.
오름차순
sort(v.begin(), v.end());
내림차순
sort(v.rbegin(), v.rend());
기타
sort(v,begin(), v.end(), comp);
여기서 comp는 어떤 방식으로 배열을 정렬해줄까에 대한 함수이다. 주의점으로는 comp()가 아닌 comp를 써 주어야 한다는 것이다.
comp함수는 자료형 bool을 사용한다.
예를 들어

bool comp(int a, int b){
	return a < b;
    }

이렇게 되어 있다면, 자동으로 a가 앞의 인자가 되고 b가 뒤의 인자가 된다. 그래서 함수 안의 값이 true(1)이라면 sort를 실시하는 것이다. 즉, a보다 b가 크게 되면 comp에 나왔던 식으로 정렬이 실행되는 것이다.
코드에서 본다면, 만일 a의 N번째 문자(a[N])와 b의 N번째 문자(b[N])가 같다면, 사전순으로 정렬하게 한다. a < b이니, a(오른쪽 문자)보다 b(왼쪽 문자)보다 클 수 있도록 정렬하는 걸 의미한다. 만일 다르다면 N번째 문자가 더 큰게 뒤로 가도록 정렬한다. 내림차순으로 정렬하려면 부호를 반대로 바꾸면 된다.

코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int N;

bool comp(string a, string b){
    if(a[N] == b[N]){
        return a < b;
    }else{
        return a[N] < b[N];
    }
}

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;
    N = n;
    
    sort(strings.begin(), strings.end(), comp);
    return strings;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글