반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
std::sort 정렬 기준 바꾸기 본문
반응형
문제 풀 때마다 맨날 헷갈려서 정리했음
1. 일반 배열 내림차순 정렬
#include <stdio.h>
#include <algorithm>
using namespace std;
int n, a[10];
bool compare2(const int&x, const int&y) {
return x > y;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n, compare2);
for (int i = 0; i < n; i++) {
printf("%d\n", a[i]);
}
}
2. vector 오름차순 정렬
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n;
vector<int> a(5);
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a.begin(), a.end());
for (int i = 0; i < n; i++) {
printf("%d\n", a[i]);
}
}
3. pair 배열
3-1) first를 기준으로 오름차순 정렬
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n;
pair<int, int> a[10];
bool compare(pair<int, int> x, pair<int, int> y) {
return x.first < y.first;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a[i].first, &a[i].second);
}
sort(a, a+n, compare);
for (int i = 0; i < n; i++) {
printf("%d %d\n", a[i].first, a[i].second);
}
}
3-2) second를 기준으로 내림차순 정렬
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n;
pair<int, int> a[10];
bool compare(pair<int, int> a, pair<int, int> b){
return a.second>b.second;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a[i].first, &a[i].second);
}
sort(a, a+n, compare);
for (int i = 0; i < n; i++) {
printf("%d %d\n", a[i].first, a[i].second);
}
}
3-3) second를 기준으로 오름차순 정렬하는데, second가 같으면 first를 기준으로 오름차순 정렬
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<pair<int, int>>v;
bool cmp(pair<int, int>x, pair<int, int>y) {
if (x.second != y.second) return x.second < y.second;
else return x.first < y.first;
}
int main() {
int n;
cin >> n;
while (n--) {
int a, b;
cin >> a >> b;
v.push_back({ a,b });
}
sort(v.begin(), v.end(), cmp);
for(auto x: v) {
cout << x.first << " " << x.second << "\n";
}
}
4. 구조체 정렬
4-1) m을 기준으로 오름차순 정렬
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
int m;
int v;
}a[300005];
bool compare(const j&x, const j&y) {
return x.m < y.m;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a[i].m, &a[i].v);
}
sort(a, a + n, compare);
}
4-2) v를 기준으로 내림차순 정렬(함수 따로 선언)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
int m;
int v;
}a[300005];
bool compare(const j&x, const j&y) {
return x.v > y.v;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a[i].m, &a[i].v);
}
sort(a, a + n, compare);
}
4-3) v를 기준으로 내림차순 정렬(함수 바로 선언)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
int m;
int v;
}a[300005];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a[i].m, &a[i].v);
}
sort(a, a + n, [](j x, j y) { return x.v > y.v; });
for (int i = 0; i < n; i++) {
printf("%d %d\n", a[i].m, a[i].v);
}
}
4-4) v를 기준으로 내림차순 정렬하는데 v가 같으면 m을 기준으로 오름차순
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
int m;
int v;
}a[300005];
bool cmp(j a, j b) { //내림차순
if (a.v != b.v)
return a.v > b.v;
else
return a.m < b.m;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a[i].m, &a[i].v);
}
sort(a, a + n, cmp);
for (int i = 0; i < n; i++) {
printf("%d %d\n", a[i].m, a[i].v);
}
}
5. 응용
5-1) 1의 자리를 기준으로 오름차순 정렬
#include <stdio.h>
#include <algorithm>
using namespace std;
int n, a[10];
bool compare(const int&x, const int&y) {
return x % 10 < y % 10;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n, compare);
for (int i = 0; i < n; i++) {
printf("%d\n", a[i]);
}
}
반응형
'알고리즘 > Algorithm' 카테고리의 다른 글
알고리즘-수학2 (0) | 2019.07.06 |
---|---|
알고리즘-수학1 (0) | 2019.07.06 |
C언어 1차원, 2차원 배열 (0) | 2019.05.09 |
탐욕 알고리즘(greedy algorithm) (2) | 2019.05.09 |
C언어 알고리즘-정수, 실수, 문자/문자열 입출력 (0) | 2019.05.04 |
Comments