<algorithm>의 sort를 사용해 길이/사전순 배열로 정렬해주고,
출력할 때 중복된 벡터는 넘어가게 해준다.
<note>
1.
sort 함수를 사용해 단순 오름차순, 내림차순 배열 뿐만아니라, bool 함수를 직접 지정해 세번째 매개변수로 넣어주면
내가 원하는대로 정렬할 수 있다.
이 문제의 경우 Compare 함수가 해당 부분인데, return 값으로 원하는 경우(길이순 배열, 사전 순 배열)에 true 값을 주게 설정한다.
참고로 string 변수에 비교연산자를 넣으면 알아서 사전순 배열로 계산이 된다.
2.
continue문은 현재 루프 몸체의 끝으로 이동하는 편리한 방법을 제공한다. 현재 반복을 일찍 종료하고자 할 때 유용하다.
쉽게 말해서 coninute 문을 사용하여 일부 코드를 실행하지 않고 점프할 수 있다.
특정 경우에 반복문의 내용을 실행하고 싶지 않을 경우 사용하면 유용하다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool Compare(string aString,string bString)
{
if (aString.length() != bString.length())
return aString.length() < bString.length(); //길이가 다르다면 길이순 정렬
else
return aString < bString; //길이가 같다면 사전순 정렬
}
int main()
{
int N;
cin >> N;
vector<string> words;
//입력
for (int i = 0; i < N; i++)
{
string word;
cin >> word;
words.push_back(word);
}
//compare : 원하는대로 처리해 정렬할 사용자 지정 함수
sort(words.begin(), words.end(), Compare);
//같으면 출력하지 않고 넘어가는 함수
//아래 i-1연산을 위해 0번째는 따로 출력해주고 i=1부터 for문을 돌린다.
cout << words[0]<<endl;
for (int i = 1; i < N; i++)
{
if (words[i] == words[i - 1])
continue; //루프의 몸체 끝으로 점프한다. (해당 경우 코드를 실행하지 않고 넘어간다)
cout << words[i] << endl;
}
}
'C++ > 백준 코딩테스트 풀이 C++' 카테고리의 다른 글
C++ 1436 영화감독 숌 (0) | 2022.07.15 |
---|---|
C++ 2884 알람시계 (0) | 2022.07.06 |
C++ 10871 X보다 큰 수 (0) | 2022.07.03 |
C++ 2869 달팽이는 올라가고 싶다 (0) | 2022.07.02 |
C++ 2798 블랙잭 (0) | 2022.07.01 |