볼록 껍질

면접 대비

시간 제한1초메모리 제한128 MB

요약
볼록 껍질 위의 점인지 표시된 점들이 주어질 때, 껍질 위의 점만 골라 가장 작은 x, y 점부터 반시계 방향 순서로 출력한다.
난이도

보통10점 중 4점

유형
기하, 정렬, 구현, 수학
정답자
아직 제출이 없습니다

문제

주어진 점들의 볼록 껍질(convex hull)을 찾는 기술은 여러 곳에서 요긴하게 쓰입니다. 이 작업은 크게 두 단계로 나뉩니다. 첫 번째 단계는 볼록 껍질 위에 있는 점들을 찾아내는 것이고, 두 번째 단계는 그 점들을 반시계 방향 순서로 나열하는 것입니다. 첫 번째 단계는 이미 끝났다고 가정합니다. 즉, 각 점이 볼록 껍질 위에 있는지 아닌지가 이미 표시되어 있습니다. 두 번째 단계를 수행하는 프로그램, 곧 볼록 껍질 위의 점들을 반시계 방향으로 나열하는 프로그램을 작성하세요.

입력

첫째 줄에 점의 개수 nn이 주어집니다 (3≤n≤100,0003 \le n \le 100{,}000).

다음 nn개의 줄에는 각 점에 대한 세 값 xx, yy, cc가 주어집니다. xx와 yy는 절댓값이 1,000,000,0001{,}000{,}000{,}000 이하인 정수이고, cc는 문자 Y 또는 N입니다. Y는 그 점이 볼록 껍질 위에 있음을, N은 그렇지 않음을 뜻합니다.

같은 위치의 점은 없으며, 모든 점이 한 직선 위에 있는 경우도 없습니다.

출력

첫째 줄에 볼록 껍질을 이루는 점의 개수를 출력합니다. 이어서 그 점들을 한 줄에 하나씩 x y 형태로, 반시계 방향 순서가 되도록 출력합니다. 가장 먼저 출력하는 점은 xx좌표가 가장 작은 점이어야 하며, 그런 점이 여럿이라면 그중에서 yy좌표가 가장 작은 점을 고릅니다.

예제1

  1. 예제 1

    입력
    5
    1 1 Y
    1 -1 Y
    0 0 N
    -1 -1 Y
    -1 1 Y
    
    예상 출력
    4
    -1 -1
    1 -1
    1 1
    -1 1