본문 바로가기
알고리즘/BOJ

[BOJ] 1181. 단어 정렬

by hyerann 2020. 3. 25.

여러번 입력된 경우에는 한번씩만 출력하라는 요구사항이 있기 때문에 set 자료구조를 사용하였습니다.

그리고 set은 자동 정렬이기 때문에 사용자 정의 함수를 이용하기 위해서 set을 vector로 복사하여 사용자 정의 함수와 함께 sort 함수로 정렬하였습니다.

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

#include <iostream>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

set<string> inputSet;

bool cmp(string s1, string s2) {
    if(s1.length() < s2.length()) {
        return true;
    }
    if(s1.length() > s2.length()) {
        return false;
    }
    if(s1 < s2) {
        return true;
    }
    return false;
}

int main() {
    cin.tie(0); cout.tie(0);
    ios::sync_with_stdio(0);
    
    int N;
    cin >> N;
    
    while(N>0) {
        string input;
        cin >> input;
        inputSet.insert(input);
        N--;
    }
    vector<string> inputVec(inputSet.size());
    copy(inputSet.begin(), inputSet.end(), inputVec.begin());
    
    sort(inputVec.begin(), inputVec.end(), cmp);
    
    for(auto it=inputVec.begin(); it!=inputVec.end(); it++) {
        cout << *it << '\n';
    }
    
    return 0;
}

댓글