공부/백준

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