문제
https://www.acmicpc.net/problem/18870
코드
1 | public static void main(String[] args) throws IOException { |
흐름
- 입력받은 좌표를 저장한 리스트로 수정하면 출력 순서를 맞출 수 없으니 우선 좌표 list를 복사한다.
- 복사한 list를 정렬하고 순서대로 반복하면서 좌표값을 key로 index를 저장한다.
- {-10 : 0}, {-9, 1}… {4,4}
- 입력받은 좌표를 순서대로 반복하면서 map에 key로 index를 가져온다.
- 끝
좌표 압축의 이유
- 문제의 예제인 좌표 {2 4 -10 4 -9}을 위와 같은 알고리즘으로 압축하면 {2 3 0 3 1}이 되는데 위 그림 처럼 압축된 점들도 같은 동일선상 안에 놓이게 된다.
- 이렇게 범위가 매우 넓은 좌표의 경우에 좌표를 인덱싱해서 처리 할 경우 손쉽게 처리 할 수 있게 된다.
결과
참고 사이트
- https://www.desmos.com/calculator/id7dqtpnmv?lang=ko
- https://codingdog.tistory.com/entry/%EC%A2%8C%ED%91%9C-%EC%95%95%EC%B6%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B2%94%EC%9C%84%EA%B0%80-%ED%81%B4-%EB%95%8C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B3%B5%EA%B0%84%EC%9D%84-%EC%A4%84%EC%9D%BC%EA%B9%8C%EC%9A%94