궤도

[백준] 1181번 : 단어 정렬 본문

💻 현생/⛓ 알고리즘

[백준] 1181번 : 단어 정렬

영이오 2020. 10. 15. 22:47

문제

 


풀이

 

정렬은 어렵지 않다. 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