728x90
반응형
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool compareWith(string a, string b){
if(a.length() == b.length())
return a < b;
else return a.length() < b.length();
}
int main() {
int n;
cin >> n;
string s;
vector<string> v;
for(int i = 0; i < n; i++){
cin >> s;
if(find(v.begin(), v.end(), s) == v.end())
v.push_back(s);
}
sort(v.begin(), v.end(), compareWith);
for(int i = 0; i < v.size(); i++){
cout << v[i] << "\n";
}
return 0;
}
정렬하기 전에 중복부터 없애는 것이 편하다. find 함수가 해당 단어가 존재하지 않을 경우 v.end()를 반환하면 중복된 단어가 없다는 의미이므로 입력된 값을 vector에 넣었다.
입력이 끝나면 sort 함수를 통해 정렬한다. compareWith 함수를 만들어 길이가 같을 경우 사전 순으로 비교, 길이가 같지 않으면 문자열 길이를 비교하도록 하였다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 10816번 숫자 카드 2 (C++) (0) | 2021.12.29 |
---|---|
[BOJ] 11899번 괄호 끼워넣기 (C++) (0) | 2021.12.28 |
[BOJ] 9012번 괄호 (C++) (0) | 2021.12.25 |
[BOJ] 11866번 요세푸스 문제 0 (C++) (0) | 2021.12.25 |
[BOJ] 2623번 음악프로그램 (C++) (0) | 2021.12.24 |