주소 : https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
소스 코드 :
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
bool compare(string a, string b)
{
int i = 0;
if (a.length() == b.length())
{
for (int i = 0; i < a.length(); i++)
{
if (a[i] != b[i])
return a[i] < b[i];
}
}
return a.length() < b.length();
}
int main()
{
int num = 0;
string input;
vector<string> v;
cin >> num;
for (int i = 0; i < num; i++)
{
cin >> input;
v.push_back(input);
}
sort(v.begin(), v.end(), compare);
cout << v[0] << endl;
for (int i = 1; i < num; i++)
{
if (v[i - 1] == v[i])
continue;
cout << v[i] << endl;
}
}
마무리 : 이 문제는 정렬 문제로 단어의 길이 순으로 정렬하는 대신 같은 길이면 사전 순으로 정렬하는 문제이다. 그냥 sort를 하면 사전 순으로 배열하기 때문에 compare 함수를 이용해서 길이 순으로 정렬하게 만들어주며 만약 길이가 같으면 사전 순으로 정렬하게 만들었다. if문을 통해서 만약 같은 단어가 있으면 continue를 이용해서 무시하도록 만들어준다.
이 문제를 통해서 sort에 대한 이용법을 잘 알게 되었다.
'백준 > C++' 카테고리의 다른 글
백준 1978번 : 소수 찾기 [C++] (0) | 2022.08.07 |
---|---|
백준 1436번 : 영화감독 숌 [C++] (0) | 2022.08.07 |
백준 10989번 : 수 정렬하기 3 [C++] (0) | 2022.08.05 |
백준 2775번 : 부녀회장이 될테야 [C++] (0) | 2022.08.04 |
백준 2609번 : 최대공약수와 최소공배수 [C++] (0) | 2022.08.04 |