알고리즘/문제 풀이

1181번: 단어 정렬

Themion 2021. 12. 7. 16:03

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

 

1181번: 단어 정렬

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

www.acmicpc.net

단어를 입력받아 길이순, 사전순으로 출력하는 문제이다. 단어를 길이에 따라 나눠 저장한 뒤 각 단어를 정렬하면 된다.

#include <iostream>
#include <set>
#include <string>

using namespace std;

#define MAX_LEN 50

int main() {
    // 입출력 속도 향상
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    // 정렬할 단어의 개수
    int N;
    // s[i]: 길이가 i인 단어의 집합
    set<string> s[MAX_LEN + 1];
    // 단어를 입력받을 공간
    string str;

    // 단어의 개수를 입력받은 뒤
    cin >> N;
    // 단어를 길이에 따라 나누어 저장한다
    while (N--) {
        cin >> str;
        s[str.size()].insert(str);
    }

    // 단어를 길이순 -> 사전순으로 출력
    for (N = 0; N <= MAX_LEN; N++) for (auto it : s[N]) 
        cout << it << '\n';

    return 0;
}