문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
소스 코드
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(string a, string b) {
if( a.length() == b.length() )
return a < b;
else
return a.length() < b.length();
}
int main() {
int N;
cin >> N;
string a[N];
for( int i = 0; i < N; i++ ) cin >> a[i];
sort(a, a + N, compare);
for( int i = 0; i < N; i++ )
{
if ( a[i] != a[i + 1] ) cout << a[i] <<endl;
}
}
문제 풀이
1. 단어의 개수 N을 입력받고 반복문을 통해 단어 N개를 a[N] 배열에 저장한다.
2. 문제 조건을 사용하기 위해 bool 타입을 반환하는 compare 함수를 선언한다.
(1) 길이가 만약 같다면, 사전 순으로 정렬하기 위해 a < b를 return 한다.
(2) 길이가 같지 않다면, 길이가 긴 순서로 정렬을 하기 위해 a.length() < b.length()를 return 한다.
3. compare 함수를 활용하기 위해 sort함수를 사용해 a 배열을 정렬한다.
4. 마지막으로, 중복된 단어를 제거하고 출력하기 위해 반복문을 통해 같지 않은 정렬되어있는 배열의 다음 값과 같지 않은 경우에만 출력한다.
'Koala - 13기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] 15905번 : 스텔라(STELLA)가 치킨을 선물했어요 (0) | 2024.01.28 |
---|---|
[백준/C++] 10845: (0) | 2024.01.28 |
[백준/python] 14910번: 오르막 (0) | 2024.01.28 |
[백준/C++] 2869번 달팽이는 올라가고 싶다 (0) | 2024.01.28 |
[백준/Python]14910 오르막 (0) | 2024.01.28 |