본문 바로가기
개발 노트/백준, 프로그래머스 풀이

문자열 내 맘대로 정렬하기

by tokkiC 2022. 6. 19.

문제를 보자마자 sort 를 사용하여 정렬하면 되겠구나 했는데

벡터 안의 string 요소들이 담겨 있으니 아 2차원 배열로 풀면 되겠구나? 하고 생각했었고... cmp 함수를

제대로 못설계해서 시간을 날렸던 문제이다

커스텀 비교 함수의 사용법을 이해하게 된 문제이다 

벡터 내 요소들인 string 들도 순서대로 비교가능하고, string내부의 인덱스 요소들도 순서를 비교가능하다

sort 의 비교함수는 인자를 2개를 가지고 비교하는데, 문제에서는 string 내 인덱스값이 같을때를 예외조건으로

달았으므로 두 string의 k번째 인덱스의 값이 같을 시 비교순서도 정해서 만들어주면 되는 문제였다

 

 

아래에 cmp함수의 a<b 등의 비교에서 이해하기 쉽게 적었지만 원리는 조금 다르다. 하지만 지금은 저렇게만 알아두자

#include <bits/stdc++.h>

using namespace std;

int k;

// sort 의 세번째 인자로 가질수 있는 함수는 a와 b를 2개를 인자로 가져서 비교하는 함수이다
bool cmp(string a, string b){
    // 문자열 a, b에서 k번째 인덱스의 값이 같다면
    if(a[k]==b[k]){
    // a, b를 비교하여 앞의 a가 더 작게 하라(작은 것이 먼저 오도록 = 오름차순)  
        return a < b;
    // 문자열 a, b에서  k번째 인덱스의 값이 같지 않다면
    } else {
        // a, b 문자열의 k번째 인덱스의 값은 앞의 a[k] 가 뒤의 b[k]보다 작게하라(=오름차순)
        return a[k] < b[k];
    }
}

vector<string> solution(vector<string> strings, int n) {
    // cmp 사용자 정의 함수에서 사용할 k에 n을 할당한다
    k=n;
    sort(strings.begin(), strings.end(), cmp);
    
    return strings;
}

댓글