[백준] 단어정렬 c++ (1181번)
2025. 5. 5. 18:02ㆍ코딩테스트
단어 정렬
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 256 MB | 226273 | 96449 | 72101 | 40.843% |
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
- sort 함수를 이용해 정렬하고, 그 과정에서 사용자 정의 비교 함수를 추가한다.
- 사용자 정의 함수에서 true일 경우 그대로 정렬, false 경우 두 값을 서로 swap 한다.
#include <iostream>
#include <algorithm>
using namespace std;
string a[20001];
//사용자 비교 함수
bool Compare(string& a, string& b)
{
//길이가 같다면
if (a.length() == b.length())
{
// 사전 순으로 정렬 (a,b를 비교를 하면 한 문자씩 아스키 코드의 값을 통해 비교가 자동으로 이루어진다.
return a < b;
}
else
{
//길이다르다면, 더 짧은 순으로
return a.length() < b.length();
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
sort(a, a + n, Compare);
cout << a[0] << endl;
for (int i = 1; i < n; i++)
{
if (a[i] == a[i - 1])
continue;
cout << a[i] << endl;
}
}
https://www.acmicpc.net/problem/1181
'코딩테스트' 카테고리의 다른 글
[백준] 벽 부수고 이동하기 c++ (2206번) (0) | 2025.05.02 |
---|---|
[백준] 1,2,3 더하기 c++ (9095번) (0) | 2025.05.01 |
[백준] 나이트의 이동 c++ (7562번) (0) | 2025.05.01 |
[백준] 섬의 개수 c++ (4963번) (0) | 2025.04.28 |
[백준] 숨바꼭질 c++ (1697번) (0) | 2025.04.26 |