Baekjoon

[백준 C++] 11651번, 10814번 (정렬)

yujin0517 2022. 3. 4. 00:16

11651번 - 좌표 정렬하기 2

11651번 문제 

 

예제

 

<코드 작성>

입력받은 N에 따라 N개의 x, y좌표를 입력받기 위해 vetcor와 pair를 사용하였습니다.

입력받은 좌표를 문제 조건에 맞게 정렬하기 위해 sort를 사용하였습니다. sort()의 세 번째 인자에는 정렬의 기준이 되는 compare 함수(bool타입)를 입력하였습니다.

compare 함수는 y좌표 값이 동일할 경우 x좌표 값을 비교하여 오름차순으로 정렬하고 동일하지 않을 경우 마찬가지로 오름차순으로 정렬하도록 구현하였습니다. 

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool compare(pair<int, int>x, pair<int, int>y) {
	if (x.second == y.second)
		return x.first < y.first;
	return x.second < y.second;
}//y좌표 비교 함수 

int main() {
	int N;
	cin >> N;

	int x, y;
	vector<pair<int, int>> v;

	for (int i = 0; i < N; i++) {
		cin >> x >> y;
		v.push_back(make_pair(x, y));
	} //x, y좌표 입력 받기 

	sort(v.begin(), v.end(), compare); 
	//compare함수를 만들어서 sort()의 세 번째 인자에 넣으면 compare에서 반환된 값에 따라 정렬됨.
	
	for (int i = 0; i < N; i++) {
		cout << v[i].first << " " << v[i].second << '\n';
	}//조건에 맞게 정렬된 x, y좌표 출력
    
	return 0;
}

 

이제는 정수를 입력받아 반복문을 실행하는 문제가 나오면 바로 vector를 선언하고 시작합니다. 

처음에 문제를 풀 때는 2차원 배열을 vector를 사용해 구현할 생각이었지만 반복문에서 x, y좌표 값을 입력받는 과정에서 방향을 바꿔 pair를 사용하게 되었습니다.  pair을 사용해본 적이 많이 없어서 x, y좌표 값을 입력받는 방법을 찾다가 pair을 사용하게 되었습니다. 

vector와 pair의 사용법을 알고 있으면 쉽게 해결할 수 있는 문제라고 생각합니다. 

 

 

10814번 - 나이순 정렬

10814번
예제

 

<코드 작성>

같은 정렬 문제이기 때문에 위의 문제(11651번)와 거의 동일하게 구현하였습니다. 

차이점이 있다면 pair를 사용할 때 type을 하나는 int 나머지 하나는 string으로 선언하였습니다.

그리고 나이가 같을 경우 먼저 가입한 사람 순서로 출력하기 위해 sort 함수 대신 stable_sort를 사용하였습니다.  

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool compare(pair<int, string> a, pair<int, string> b) {
	return a.first < b.first;
}

int main() {
	int N;
	cin >> N;

	int age; string name;
	vector<pair<int, string>> inpo;
	
	for (int i = 0; i < N; i++) {
		cin >> age >> name;
		inpo.push_back(make_pair(age, name));
	}

	stable_sort(inpo.begin(), inpo.end(), compare);

	for (int i = 0; i < N; i++) {
		cout << inpo[i].first << " " << inpo[i].second << '\n';
	}

	return 0;
}

 

이 문제를 풀면서 stable_sort라는 함수를 알게 되었습니다. 나이가 같을 경우 가입 순으로 출력하는 조건을 구현하기 위해 입력된 순서대로 출력하는 방법(stable_sort)을 구글을 통해 찾게 되었습니다. 

stable_sort함수는 여러 값을 하나의 요소로 정렬했을 때, 다른 요소들의 정렬 순서는 정렬 전과 동일하게 유지되도록 하는 정렬입니다. 

 

감사합니다!

2022.03.03

'Baekjoon' 카테고리의 다른 글

[백준 - Java] 2529번 - 부등호  (0) 2022.08.17
[백준 Java] 10808번 - 알파벳 개수  (0) 2022.08.02
[백준 C++] 2292번, 2775번  (0) 2022.02.19
[백준 C++] 1065번 - 한수  (0) 2022.02.19
[백준 C++] 4344번 - 평균은 넘겠지  (0) 2022.02.17