공부/Problem solving

각도 정렬하기

구사과 2016. 5. 21. 21:00

sort(a, a+n, [&](const pnt &a, const pnt &b){

if((pi(a.x, a.y) > pi(0, 0)) ^ (pi(b.x, b.y) > pi(0, 0))) return pi(a.x, a.y) > pi(b.x, b.y);

if(ccw(a, b) != 0) return ccw(a, b) > 0;

return hypot(a) < hypot(b);

});

앞문제를 풀다가 발견한 코드. 1 2 3 4 사분면에 상관없이 각도정렬을 할 수 있다.

+ 5.21 업데이트. 각도가 같을 경우 거리순으로 정렬한다. (hypot(p) = p.x^2 + p.y^2, pi = make_pair)

+ 2017.8.14 업데이트. 코드 길이를 많이 줄였다.