기본 콘텐츠로 건너뛰기

좌표압축

고리즘을 풀다 보면 좌표압축이라는 테크닉이 필요합니다.저는 좌표압축을 "순위가 중요한 알고리즘에서, 입력값의 갯수보다 입력값의 범위가 클 때 사용하는 방법", 이라고 생각하고 있습니다.
1차원의 좌표로 예를 들어보겠습니다.n개의 x값 을 입력 받아, 입력 중 두개의  x1,x2를 선택하여 사이에 존재하는 점의 개수를 구하는 작업이 있다고 가정합시다.x의 범위는 int형의 범위인 -2^31 ~ 2^31-1 이고 중복은 없습니다. n은 5000 이하입니다.입력은 n : 7, -2^31, -10000, 0 , -2000, 3, 6, 30000 , x1 = -10000, x2 = 30000
대략적으로 보면 그림과 같이 나타나게 됩니다.
x1,x2 사이의 값을 구하게 되면 4개의 값이 나오게 됩니다.

이 경우 위의 값들을 아래와 같이 순위를 유지하면서 바꿔주어도 문제를 풀 수가있습니다.
이렇게 바꿔서 풀 수 있는 이유는 값보다 값의 순위가 중요하기 때문니다.

압축좌표가 필요한 예로, 카카오 코드 페스티벌 5번 캠핑 문제가 될 수 있습니다.이 경우 좌표 x,y의 범위는 0 ~ 2^31-1 이지만, 입력받는 좌표의 개수는 최대 5000개 입니다.만약 입력의 좌표를 그대로 반영하여 문제를 푼다고 하면 배열의 크기가 2^31-1 개가 되어야 합니다. 게다가 2차원으로..못풉니다. 탐색하다가 시간다 끝날꺼에요.하지만 입력이 최대의 개수가 최대 5000이라고 했으니 좌표압축을 이용해 입력받은 좌표를 0~5000 으로 매치시키고 풀게되는 것 입니다.

댓글

이 블로그의 인기 게시물

맥스 어만(Max Ehrmann) - 소망(진정 바라는 것)

진정 바라는 것                                                                       -맥스 어만 소란스럽고 바쁜 일상속에서도  침묵 안에 평화가 있다는 사실을 기억하십시오 포기하지 말고 가능한한 모든 사람들과 잘 지내도록 하십시오 조용하면서도 분명하게 진실을 말하고  어리석고 무지한 사람들의 말에도 귀를 기울이십시오  그들 역시 할 이야기가 있을테니까요  목소리가 크고 공격적인 사람들은 피하십시오  그들은 영혼을 괴롭힙니다 자신을 다른 사람들과 비교하면 자신이 하찮아 보이고  비참한 마음이 들수도 있습니다  더 위대하거나 더 못한 사람들은 언제나 있기 마련입니다  당신이 계획한 것뿐만 아니라  당신이 이루어 낸 것들을 보며 즐거워 하십시오  아무리 보잘것 없더라도  당신이 하는 일에 온 마음을 쏟으십시오  그것이야말로 변할 수 밖에 없는 시간의 운명 속에서  진실로 소유할 수 있는 것이기 때문입니다 사업상의 일에도 주의를 기울이십시오 세상은 속임수로 가득하기 때문입니다  그러나 세상에 미덕이 있다는 것을 간과하고 지나치지는 마십시오  많은 사람들이 높은 이상을 위해 애쓰고 있고 삶은 영웅적인 행위로 가득 차 있기 때문입니다  당신 본연의 모습을 찾으십시오  특히 가식적인 모습이 되지 마십시오 사랑에 대해 냉소적이지 마십시오 아무리 무미건조하고 꿈이 없는 상태에서도  사랑은 잔디처럼 끊임없이 돋아나기 때문입니다 나이든 사람들의 충고는 겸허히 받아들이고  젊은이들의 생각에는 품위있게 양보하십시오 갑작스런 불행에서 자신을 보호하려면  영혼의 힘을 키워야 합니다 그러나 쓸데 없는 상상으로 자신을 괴롭히지는 마십시오 많은 두려움은 피로와 외로움에서 생겨납니다  그러니 자신을 너무 다그치지 말고  자신에게 관대해지도록 노력하십시오 당신은 나무나 별들과