알고리즘/문제 풀이
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;
}