문제
리뷰
단순히 sort 하면 되는 줄 알고 풀었는데, 아니었다.
단어 길이가 짧을 수록 앞에 와야 한다.
단어 길이가 다르다면, 길이가 짧은 것이 앞으로 와야 한다.
길이가 같으면, 사전순으로 정렬 한다.
sort 의 기준이 되는 compare 함수를 작성했다.
bool compare(string a, string b){
if(a.size() == b.size() ) return a < b; // 사전순 정렬
else return a.size() < b.size(); // 길이 긴 것이 뒤로
}
sort(v.begin(), v.end(), compare);
맞은 코드
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<string> v;
bool compare(string a, string b){
if(a.size() == b.size() ) return a < b;
else return a.size() < b.size();
}
int main(void){
int cnt = 0;
cin >> cnt;
while(cnt--){
string input;
cin >> input;
// 중복 없으면 푸시
if(find(v.begin(), v.end(), input) == v.end()) v.push_back(input);
}
sort(v.begin(), v.end(), compare);
for(int i = 0; i < v.size(); i++){
cout << v[i] << '\n';
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
ACM 호텔 백준 10250번 c++ (0) | 2020.09.28 |
---|---|
이항계수1 백준 11050번 c++ (0) | 2020.09.28 |
듣보잡 백준 1764번 c++ (0) | 2020.09.22 |
숨바꼭질6 백준 17087번 c++ (0) | 2020.09.19 |
링크와 스타트 백준 15661번 c++ (0) | 2020.09.17 |