1. 오늘 겪은 문제
-
알고리즘 문제 - 투포인터
투포인터
-
JS DEEP DIVE
2. 해본 시도
- 투 포인터
- 2중 포문을 통해 구현은 하였지만, 시간초과가 났다.
- JS DEEP DIVE
- JS를 쓰고 있지만 막상 JS의 장단점에 깊게 고민해 본적은 없었다. 막연하게 프론트 백엔드를 오갈 수 있는 자유로운 언어 정도로 생각했던 것 같다.
3. 해결 방법
- 시작점, 끝점이라는 투 포인터를 사용하여 시작점과 끝점사이의 범위의 부분합을 구하는데, 부분합이 목표값보다 작은면 끝점을 올려 범위를 넓혀주고, 크다면 시작점을 올려 범위를 좁히는 식으로 판별하며 반복한다. 이렇게 할 때의 O(N)의 시간복잡도로 해결 가능하다.
- JS의 장점은 내가 쓸 때는 단점으로 느껴지기도 하지만 각 상황마다 가장 빠르게 처리할 수 있는 작업들을 처리해가며 또, 코드의 한줄한줄에 바로바로 응답, 대응할 수 있는 지점이라고 배우게 되었다. 다만 한개의 크고 무거운 작업이 주가 되는 상황에서는 지양하는게 좋겠다.
4. 새롭게 알게 된 점
- 투포인터 기법에 대하여 알게 되었다. 2중 포문을 통해 완전탐색을 할 때 시간초과가 난다면 꼭 생각해 보아야 할 것 같다.
- JS의 장단점에 대하여 알게 되었다. 또 컴파일언어보다 상대적으로 느린 인터프리터 언어인 JS가 어떻게 성능을 개선했는지도 찾아 보았다.
-> JIT 컴파일러 기법을 가지고 만든 TurboFan이라는 컴파일러로 개선하였다!
JIT 컴파일러 기법
-> 자주 보지 못할법한 코드들은 인터프리터가 담당하고,
-> 자주 쓰는 코드는 이미 최적화해 놓은 컴파일러가 컴파일 해!