알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
- vector<pair<int, string>> 형식으로 단어의 길이와 그 단어를 벡터의 한 요소로 함께 넣는다. 이 벡터에 sort함수를 사용하면 먼저 단어의 길이 오름차순 정렬, 그리고 사전 순으로 오름차순 정렬이 가능하다
- 한 단어의 중복 출력을 피한다
# include <iostream>
# include <queue>
# include <vector>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
int main()
{
int n; // 단어 갯수 입력받기
cin >> n;
// 단어길이와 단어를 담는 배열
vector<pair<int,string>> vec;
// 각 단어와 길이를 입력받고 배열에 저장
for (int i = 0; i < n; i++)
{
string word;
cin >> word;
int len = word.length();
vec.push_back({len, word});
}
// 정렬
sort(vec.begin(), vec.end());
// 단어 확인하면서 중복 출력 피하기
for (int j = 0; j < n; j++)
{
if (vec[j].second == vec[j+1].second)
continue;
cout << vec[j].second << '\n';
}
return 0;
}