단어 정렬 - 백준 1181

2022. 2. 16. 10:20프로그래머스

문제 링크

1181번: 단어 정렬 (acmicpc.net)

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

문자열을 정렬하는 문제입니다.

문자열을 길이순으로 정렬하되, 길이가 같은 경우 사전순으로 정렬하고 같은 단어가 있는 경우 한 번만 출력합니다.

 

소스코드

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string s[20000];

bool sort1(string a, string b) {
	if (a.size() < b.size())
		return true;
	else if (a.size() > b.size())
		return false;
	else {
		return a < b;
	}
}


int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> s[i];
	}

	sort(s, s+N, sort1);

	for (int i = 0; i < N; i++) {
		if (s[i] == s[i + 1]) continue;

		cout << s[i] << endl;
	}
	cout << endl;
	return 0;
}

 

sort() 함수에서 첫 번째 인자로는 배열의 시작점 주소,

두 번째로는 배열의 마지막 주소를 적어주면 됩니다.

 

기본적으로 sort 함수는 오름차순 정렬을 수행하지만 3번째 인자로 우리가 정렬을 어떻게 수행할 것인지 매서드를 통해 조정할 수 있습니다.

위 sort1() 함수를 통해 문제의 조건에 맞게 정렬을 수행합니다.

'왼쪽에 있는 것(= a)이 오른쪽에 있는 것(= b) 보다' 로 기준을 삼습니다. 

즉 위의 경우 왼쪽에 있는 a 가 오른쪽에 있는 b보다 길이가 작도록 정렬한다는 의미입니다

또 길이가 같을 경우에는 a < b : 사전순으로 정렬하도록 만듭니다.

 

'프로그래머스' 카테고리의 다른 글

[전화번호 목록] - 42577  (0) 2022.02.18
시리얼 번호 - 백준 1431  (0) 2022.02.16
5. 병합 정렬( merge sort)  (0) 2022.02.13
4. 퀵 정렬 (Quick Sort)  (0) 2022.02.01
3. 삽입 정렬(Insertion Sort)  (0) 2022.01.31