백준 단어 정렬하는데 2가지 씨스타일 2가지가 있습니다. 그럼 2가지 방법에서 한번 풀어보도록 하겠습니다. 단어 정렬2가지를 해보도록 하겠습니다. |
#include <iostream> #include <algorithm> #include <vector> #include <ctime> #include <functional> using namespace std; void Print(vector<int> &v) { cout << "vector : "; for (int i = 0; i < 10; i++) { cout << v[i] << " "; } cout << endl; } int main(void) { srand((int)time(NULL)); vector<int> v; int n = 10; for (int i = 0; i < n; i++) { v.push_back(rand() % 10); } Print(v); sort(v.begin(), v.end(), greater<int>()); Print(v); return 0; } |
/* compare 함수 사용하는 것을 보니, 일관적이고, 이게 단어 솔팅하도록 나온 것 같습니다. 이것에 대해서 익숙하게 사용하면 되겠습니다. 벡터와 동적할당 중에서 어떤 것들이 더욱 익숙할지 한번 더 적어보고 기록하도록 하겠습니다. */ #include <iostream> #include <algorithm> #include <vector> #include <ctime> #include <string> using namespace std; class Student { public: string name; int age; Student(string name, int age):name(name), age(age){} }; void Print(vector<Student> &v) { cout << "Student : "; for (int i = 0; i < 5; i++) { cout << "[" << v[i].name << ", " << v[i].age << "]"; } cout << endl; } bool compare(Student a, Student b) { if (a.name == b.name) { return a.age < b.age; } else { return a.name < b.name; } } int main(void) { vector<Student> v;
v.push_back(Student("cc", 10)); v.push_back(Student("ba", 24)); v.push_back(Student("aa", 11)); v.push_back(Student("cc", 8)); v.push_back(Student("bb", 21)); Print(v); sort(v.begin(), v.end(), compare); Print(v); return 0; }
|
정렬문제를 풀다보니, 숫자가 아닌 받은 알파벳에 대한 정렬을 하는 문제가 나옴. 이것에 대해서 필요한 헤더파일으 알고리즘과 벡터 그리고 스트링이빈다. 먼저 클래스를 생성해줍니다. 구조체와 같습니다. 퍼블릭으로 해서 모두 사용할 수 있도록 열어 둔 것 입니다. 그리고 생성합니다. 그리고 벡터 클래스를 데이터 형태를 불러와서 사용하는 것은 주소를 불러서 하는 것입니다. 이렇게 이름과 나이에 대해서 출력을 합니다. 그 다음으로 비교하는 함수를 보면, 데이터 형태 2개를 받은 다음에 만약에 하나씩 비교를 합니다. 이름이 같다면 나이에 대해서 비교를 하고 리턴을 하고 이름이 같지 않다면 이름을 사전순으로 정렬하시오 와 같은 의미입니다. 오케이요. 순서 < > 이렇게 하는 것이구나. 다음으로 벡터 스튜던트 브이름 넣어줍니다. 그리고 소트를 할때 컴패어를 뒤에 넣어줍니다. 이것을 기반으로 문제로 돌아가서 다시 한번 보도록 하겠습니다. |
#include <iostream> #include <algorithm> #include <string> using namespace std; bool cmp(const string &a, const string &b) { if (a.length() == b.length) return a < b; return a.length() < b.length(); } int main() { int n; string a[20001]; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { if (a[i] != a[i + 1]) cout << a[i] << endl; } return 0; } |
와 진짜 간단하게 풀이했네요. 스트링 배열을 만들어서 왜 이렇게 생각을 못했을까요. 엔터도 먹는다고 생각을 했는데, 그것은 geline 을 사용할때 입니다. 오케이요. 그럼 일단 스트링을 이렇게 맘껏 만들어두고 사용해보겠습니다. 그리고 진짜 간단하게 풀었네. 스트링에 대해서 완전하게 이해하고 있네요. 스트링의 사이즈와 렝쓰는 동일한것인가? 네 동일합니다. |