해결방법
sort 메서드를 이용하여 단어를 정렬하는데, 정렬 방법을 따로 만들어서 정렬을 해주었다.
내 방식은 dicSort()라고 하는 메서들를 정의하는 것이었는데, 단어의 길이가 같다면 단어를 아스키 코드순으로 정렬하고, 다르다면 길이가 긴쪽이 뒤로 가도록 만드는 방법이었다.
그런데 여기까지만 하고 제출했더니 답이 틀렸다고 나왔다.
어째서일까 생각을 했었는데, 곰곰히 생각해보니 중복된 단어를 제거하지 않은 것이었다.
erase() 메서드를 이용하여 중복된 단어를 지우는 과정을 추가해주면 정답이 된다.
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool dicSort(const string& a, const string& b)
{
if (a.length() == b.length())
return a < b;
return a.length() < b.length();
}
int main()
{
int N;
cin >> N;
vector<string> Word(N);
for (int i = 0; i < N; i++)
{
cin >> Word[i];
}
sort(Word.begin(), Word.end(), dicSort);
Word.erase(unique(Word.begin(), Word.end()), Word.end());
for (int i = 0; i < Word.size(); i++)
{
cout << Word[i] << endl;
}
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 설탕 배달 2839 (0) | 2024.12.13 |
---|---|
BOJ - 팰린드롬수 1259 (0) | 2024.12.04 |
BOJ - 생일 5635 (0) | 2024.12.02 |
BOJ - 자작나무가 없소~ 31496 (1) | 2024.11.29 |
BOJ - 행렬 곱셈 2740 (0) | 2024.11.25 |