문제 링크 : https://www.acmicpc.net/problem/1181
문제 풀이
sort 함수와 커스텀 비교 함수를 사용하여 단어를 정렬하여 풀이를 진행하였다.
다만 C++ vector에서의 중복 제거를 처음 사용해 보아서 조금 어려움도 있었다.
※ unique 함수는 중복된 값들을 뒤로 보내고, 중복된 값들의 시작 위치를 반환한다.
※ erase 함수는 시작 위치부터 종료 위치까지의 값을 모두 제거한다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
bool cmp(string &s1, string &s2){ // 커스텀 비교 함수
if(s1.size() != s2.size()) return s1.size() < s2.size();
else return s1 < s2;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
vector<string> v(n);
for(int i = 0; i < n; ++i) cin >> v[i]; // 입력
sort(v.begin(), v.end(), cmp); // 정렬
v.erase(unique(v.begin(), v.end()), v.end()); // 중복 제거
for(string s : v) cout << s << "\n"; // 출력
}
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(C++) 백준 15683번 - 감시 (0) | 2023.04.18 |
---|---|
(C++) 백준 2910번 - 빈도 정렬 (0) | 2023.04.10 |
(C++) 백준 15657번 - N과 M (8) (1) | 2023.04.09 |
(C++) 백준 15656번 - N과 M (7) (0) | 2023.04.09 |
(C++) 백준 15655번 - N과 M (6) (1) | 2023.04.09 |