공부/백준

1181번: 단어 정렬(백준 C++)

상연 2020. 11. 2. 03:03

목차

    1181번: 단어 정렬 링크

    코드

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    bool compare(const pair<string, int> &a, const pair<string, int> &b){
        if(a.second == b.second)
            return a.first < b.first;
        else
            return a.second < b.second;
    }
    int main() {
        int n;
        scanf("%d", &n);
    
        vector <pair<string, int>> v;
    
        string tmp_s;
        int tmp_l;
        bool over_lap = 0;
    
        for(int i=0; i<n; i++){
            cin >> tmp_s;
            over_lap = 0;
            for(int j=0; j<v.size(); j++){
                if(v[j].first == tmp_s){
                    over_lap = 1;
                    break;
                }
            }
            if(over_lap == 0){
                tmp_l = tmp_s.length();
                v.push_back(make_pair(tmp_s, tmp_l));}
        }
        sort(v.begin(), v.end(), compare);
    
        for(int j=0; j<v.size(); j++){
            cout << v[j].first << "\n";
        }
    
        return 0;
    }

    사견

    우선, String 타입의 문자열의 우선순위와 문자열의 길이 두가지를 비교해야하는 문제이다.
    그렇기 때문에

    vector <pair<string, int>> v

    이렇게 string과 int pair를 가진 vector를 생성해 주었다.

    이후, 임시 string 값을 입력 받은 후,
    v에 push_back으로 string 값과 , string의 길이를 make_pair하여 입력해 준다.

    단, 입력시 string 값이 현재 v내에 존재한다면 push_back을 하지 않는다.
    (이는 bool 타입의 over_lap 변수 활용)

    그렇게 입력이 된다면
    조건에 맞는 compare 함수를 작성 한후 sorting,

    vector 내 요소 크기만큼 출력하면 문제 해결이다.

    '공부 > 백준' 카테고리의 다른 글

    15649번: N과 M(1)(백준 C++)  (0) 2020.11.04
    10814번: 나이순 정렬(백준 C++)  (0) 2020.11.03
    11650번: 좌표 정렬하기(백준 C++)  (0) 2020.11.01
    1427번: 소트인사이드(백준 C++)  (0) 2020.10.31
    2108번: 통계학(백준 C++)  (0) 2020.10.30