[C++] 자료구조 - Sort based on distance

dada·2022년 1월 7일
0

C++

목록 보기
2/2

Problem

여러 개의 x, y 좌표를 받아 거리 distance 기준 내림차순 정렬
vector에서 dist값이 같으면 x값을 기준으로 오름차순 정렬
출력은 dist값, x좌표, y좌표 순서

*vector, pair 사용하기

#include<iostream>
#include<vector>
#include<algorithm> //sort 사용하기 위해 불러옴
#include<math.h> //sqrt 사용하기 위해 불러옴

using namespace std;

distance function

double dist(int x, int y) {
	double res = sqrt(x * x + y * y); //sqrt: 제곱근 구하는 함수
	return res;
}

compare fuction

bool comp(pair<double,pair<int, int>> p1, pair<double,pair<int,int>> p2) {
	if (p1.first!=p2.first) { //first: dist
		return p1 > p2; //내림차순
	}
	else { 
		return p1 < p2; //오름차순
	}
}

main

int main() {
	vector<pair<double, pair<int, int>>> v;
	int N;
	cin >> N; 
	
	//pair 입력
	int x, y;
	for (int i = 0; i < N; i++) {
		cin >> x >> y;
		v.push_back(make_pair(dist(x,y), make_pair(x, y)));
	}
	
	//sort 함수 
	sort(v.begin(), v.end(), comp);

	//출력
	for (int i = 0; i < v.size(); i++) {
		cout << v[i].first << " " << v[i].second.first << " " << v[i].second.second << endl;
	}

	return 0;
}
profile
AI, Python 등 공부용 블로그

0개의 댓글