문제
https://www.acmicpc.net/problem/1181
string 배열을 길이순, 사전순으로 정렬하는 문제였다.
문제 풀이
사실 c++을 사용하면서도 string은 잘 사용하지 않고 char 배열을 많이 사용했는데, 확실히 string이 더 편하긴 하다. 앞으로는 string을 적극 사용해야겠다. string 사전순으로 비교할 때 >로만 비교할 수 있는게 충격적이다. 조건이 2개 이상일 경우 compare 함수를 커스텀하는 것도 처음 해 봤는데 별거 아니군~!
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include<iostream>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
typedef struct word{
string s;
int len;
}word;
word str[20001];
bool compare(const word &a, const word &b) {
if (a.len == b.len) { //길이가 같은 경우 사전순
return a.s < b.s;
}
else {
return a.len < b.len;
}
}
int main()
{
int N;
int i;
scanf("%d", &N);
for (i = 0; i < N; i++) {
cin >> str[i].s;
str[i].len = str[i].s.length();
}
sort(str, str + N, compare);
for (i = 0; i < N; i++) {
if (i != N-1 && str[i].s == str[i + 1].s) {
continue;
}
cout << str[i].s << endl;
}
return 0;
}
/*
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
*/