Problem
https://www.acmicpc.net/problem/1181
알파벳 소문자로 이루어진 N개의 단어가 들어오면 다음과 같은 조건에 따라 정렬하시오. 1) 길이가 짧은 것부터 2) 길이가 같으면 사전 순으로. 단, 중복된 단어는 하나만 남기고 제거해야 한다.
Solution
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool check(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(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
string arr[n];
for(int i=0;i<n;i++)
cin >> arr[i];
sort(arr, arr+n, check);
cout << arr[0] << '\n';
for(int i=1;i<n;i++){
if(arr[i]==arr[i-1])
continue; // 중복방지
cout << arr[i] << '\n';
}
return 0;
}
Reference
https://cryptosalamander.tistory.com/51
'코딩 테스트 > 백준 (C++, Python)' 카테고리의 다른 글
cpp) 백준 10866: 덱 (0) | 2023.06.14 |
---|---|
cpp) 백준 1676: 팩토리얼 0의 개수 (1) | 2023.06.13 |
cpp) 백준 1003: 피보나치 함수 (1) | 2023.06.10 |
cpp) 백준 1541: 잃어버린 괄호 (0) | 2023.06.09 |
cpp) 백준 25206: 너의 평점은 (0) | 2023.06.09 |