Notice
Recent Posts
Recent Comments
Link
궤도
[백준] 1181번 : 단어 정렬 본문
문제
풀이
정렬은 어렵지 않다. sort 함수가 있기 때문이다. 먼저 길이 조건으로 한번 걸러주고, 길이가 같은 경우에만 사전 순으로 정렬한다. 사전 순 정렬도 어렵지 않다. string str1, str2가 있을 때 str1이 str2보다 사전 순으로 앞선다면 str1<str2이다.
이제 중복 제거만 하면 된다. 정렬이 끝났으니, 같은 문자열이라면 연속해서 나열되어 있을 것이다. i번째 문자열이 i+1번째 문자열과 다른 경우에만 출력하면 중복은 알아서 제거된다.
소스코드
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(const string& s1, const string& s2) {
if (s1.length() < s2.length()) //길이 비교
return true;
else if (s1.length() == s2.length()) //사전 비교
return s1 < s2;
else
return false;
}
int main() {
int N, i;
string arr[20000];
cin >> N;
for (i = 0; i < N; i++)
cin >> arr[i];
sort(arr, arr + N, cmp);
for (i = 0; i < N; i++) {
if (arr[i].compare(arr[i + 1]) != 0) //중복 제거
cout << arr[i] << '\n';
}
}
Comments