문제
https://www.acmicpc.net/problem/1181
문제해설
그냥 단어를 정렬하는 문제이다.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
문제풀이
pair로 첫번째는 단어의 길이, 두번째는 단어자체를 배열에 저장하고
sort를 이용해 정렬하면 된다.
다만 중복되는 단어는 하나만 출력해야 하기 때문에
정렬된 배열을 한번 돌면서 같은게 있다면 단어 길이를 100으로 만들어서 출력할 때 건너뛰도록 했다.
최대로 올 수 있는 단어가 50자까지기 때문에 그런식으로 했다.
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef pair<int, string>P;
vector<P>arr;
int main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string x;
cin >> x;
arr.push_back(P(x.length(), x));
}
sort(arr.begin(), arr.end());
for (int i = 1; i < n; i++) {
if (arr[i - 1].second == arr[i].second)
arr[i].first = 100;
}
for (int i = 0; i < n; i++) {
if (arr[i].first == 100)
continue;
cout << arr[i].second << "\n";
}
}