문제 >
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력 >
첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력 >
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
해결방법 >
1. 문자열 길이
2. 사전순
3. 중복 단어 제거
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
bool compare(pair<string, int> a, pair<string,int> b){
if(a.second == b.second){
return a.first < b.first;
}
else{
return a.second < b.second;
}
}
int main(){
int num;
string s;
string temp;
vector <pair<string, int> > v;
cin >> num;
for(int i = 0; i < num; i++){
cin >> s;
v.push_back(pair<string, int>(s, s.size()));
}
sort(v.begin(), v.end(), compare);
for(int i = 0; i < v.size(); i++){
if(i > 0 && v[i].first == v[i-1].first){
continue;
}
cout << v[i].first << endl;
}
return 0;
}
문제링크 >
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
'Problem Solving > BOJ' 카테고리의 다른 글
[백준] 1712번 - 손익분기점 (0) | 2020.01.07 |
---|---|
[백준] 1427번 - 소트인사이드 (0) | 2020.01.07 |
[백준] 1193번 - 분수찾기 (0) | 2020.01.07 |
[백준] 1085번 - 직사각형에서 탈출 (0) | 2020.01.07 |
[백준] 1026번 - 보물 (0) | 2020.01.07 |
댓글