ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++-1181-단어 정렬
    Problem Solving 2020. 12. 15. 17:17

    단어 정렬


    C++ 정렬

    1. 길이가 짧은 것부터
    2. 길이가 같으면 사전 순으로

    정렬해야 한다.

    'sort' 함수를 사용해야 한다.

    sort(arr, arr + n)

    배열의 첫 번째 포인터 값과, n번째 포인터 값을 전달해 arr 배열을 오름차순 정렬할 수 있다.
    이때, 다른 기준으로 정렬하고 싶다면, 세번째 인자로 정렬 기준을 전달해 줘야 한다.


    bool Comp(string a, string b) {
        if (a.length() != b.length()) {
            return a.length() < b.length();
        }
        else {
            return a < b;
        }
    }
    
    int main(){
    
        .
        .
        .
    
        sort(arr, arr + n, Comp)
    }

    True, False를 return하는 'Comp'함수를 만들어 세번째 인자로 전달해주자.
    먼저 우리는 길이가 짧은 것 부터 정렬하고자 한다.
    따라서 첫 번째 인자와 두 번째 인자의 길이를 비교해 두 번째 인자의 길이가 더 길때, True를 반환해준다. - 이때, 길이가 짧은 단어부터 긴 단어순으로 정렬된다.

    다음으로, 길이가 같다면 사전순으로 정렬해야 한다.
    단어를 단순히 부등호 비교를 해주면 된다. 'a < b'는 b가 a보다 사전순으로 더 뒤쪽에 위치할 때, True를 반환한다. - 사전순으로 정렬된다.

    사전순으로 뒤에 위치한 단어를 앞에 위치하게 정렬하고 싶다면, 'return a > b;'를 사용하면 된다.


    CODE

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    bool Comp(string a, string b) {
        if (a.length() != b.length()) {
            return a.length() < b.length();
        }
        else {
            return a < b;
        }
    }
    
    int main()
    {
        int n,tmp;
        cin >> n;
        string words[20001];
        for (int i = 0; i < n; i++) {
            cin >> words[i];
        }
        sort(words, words + n, Comp);
        string before="";
        for (int i = 0; i < n; i++) {
            if (before == words[i]) continue;
            cout << words[i] << "\n";
            before = words[i];
        }
        return 0;
    }

    틀린 부분이 있을 수 있습니다. 피드백 주시면 고치도록 하겠습니다! 감사합니다.👍

    [꼭 다시 풀어보기]

    'Problem Solving' 카테고리의 다른 글

    Python-14852-타일 채우기3  (1) 2020.12.15
    Python-2133-타일 채우기  (0) 2020.12.15
    Python-2751-수 정렬하기2  (0) 2020.12.14
    Python-9663-N-Queen  (0) 2020.12.13
    Python-2468-안전영역  (0) 2020.12.13
Designed by Tistory.