문제 설명
문제 풀이
2만개의 단어면 정렬 후 출력을 해도 문제가 없을 것이라고 생각했다 (NlogN가 2억 미만이므로)
중복을 따로 제거하기 귀찮아서 set을 이용하였고 set의 정렬방법을 따로 정의해주었다.
이 때 set은 operator를 overloading할 때 const를 쓰지 않으면 컴파일 오류가 나는데 원인은 아래 링크에서 설명하겠다.
https://readble-ko.tistory.com/185
[C++] set operator 사용 시 const가 필요한 이유
백준 문제를 풀다가 신기한 것을 발견했다. vector나 배열의 비교 연산자를 오버로딩할 때는 const가 없어도 컴파일 오류가 없었는데, set의 비교 연산자를 오버로딩하려고 하니 const가 없을 때만 컴
readable-ko.site
코 드
#include <iostream>
#include <set>
using namespace std ;
struct cmp
{
bool operator()(string a, string b) const {
if(a.length() == b.length()) return a < b ;
return a.length() < b.length() ;
}
};
int main()
{
int N ;
cin >> N ;
set<string, cmp> s ;
string str ;
for(int i = 0 ; i < N ; i++) {
cin >> str ;
s.insert(str) ;
}
for(auto str : s)
cout << str << "\n" ;
}
느낀점: 새롭게 set에 대해서 공부하게 되는 시간이었다.
링크: https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
'Problem Solving > 백준' 카테고리의 다른 글
[백준/C++] 9935번 문자열 폭발 풀이 (0) | 2023.11.30 |
---|---|
[백준/C++] 14003번 가장 긴 증가하는 부분 수열 5 풀이 (0) | 2023.11.27 |
[백준/C++] 11140번 LOL 해설 (0) | 2023.07.07 |
[백준/C++] 2252번 줄 세우기 (Topology sort) (0) | 2023.04.12 |
[백준/C++] 1525번 퍼즐 풀이 (0) | 2023.04.03 |