문제
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
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
*/
문제
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
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 */