728x90
반응형
1181번: 단어 정렬
문제
https://www.acmicpc.net/problem/1181
풀이
정렬 조건에 따라 정렬 후 출력하면 되는 문제다. 정렬 조건은 아래와 같다.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순
<algorithm> 헤더의 sort() 함수를 사용하면 쉽게 풀 수 있다. sort() 함수는 비교연산할 함수를 정할 수 있는데, 기본값은 오름차순이다. 따라서 compare함수를 만들어줬다. 길이가 같을 때는 사전 순으로, 이외엔 길이가 작은 순이 되도록 정렬해 주었다.
또 다른 문제의 조건은 중복된 값이 없어야 한다는 것인데 이는 erase함수와 unique함수를 함께 사용해 지워줘도 되지만 입력을 받을 때부터 vector에 입력받은 값이 없을 때만 추가해 줘서 해결했다.
코드
#include <bits/stdc++.h>
using namespace std;
bool compare(string a, string b) {
if (a.length() == b.length())
return a < b;
return a.length() < b.length();
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vector<string> v;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
if (find(v.begin(), v.end(), s) == v.end())
v.push_back(s);
}
sort(v.begin(), v.end(), compare);
for (string i : v)
cout << i << '\n';
return 0;
}
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 / BOJ] C++ 27445 Gorani Command (0) | 2023.02.11 |
---|---|
[백준 / BOJ] C++ 1193 분수찾기 (0) | 2023.02.11 |
[백준 / BOJ] C++ 1158 요세푸스 문제 (0) | 2023.02.11 |
[백준 / BOJ] C++ 1157 단어 공부 (0) | 2023.02.11 |
[백준 / BOJ] C++ 1153 네 개의 소수 (0) | 2023.02.11 |