var smallerNumbersThanCurrent = function(nums) {
const sorted = [...nums].sort((a,b) => a-b);
return nums.map(e => sorted.indexOf(e))
};
이 문제는
nums[i]
보다 작은 요소들의 개수를 카운팅하는 문제이다.
필자의 접근법은
1.nums
를 오름차순으로 정렬한 새로운 배열을 생성한다.
이 경우 정렬된 배열의 인덱스는 해당 인덱스의 요소보다 작은 요소들의 개수가 된다.
예를 들어nums = [8, 1, 2, 2, 3]; sorted = [1, 2, 2, 3, 8]; // sorted[0]보다 작은 요소의 개수는 0개 // sorted[1]보다 작은 요소의 개수는 1개 // sorted[2]보다 작은 요소의 개수는 2개 // sorted[3]보다 작은 요소의 개수는 2개 // sorted[4]보다 작은 요소의 개수는 4개
위의 예제에서
sorted[3]
과 같이 동일한 값은 indexOf 메소드로 처리 가능하다.
indexOf 메소드 사용시 검색 범위를 지정해주지않으면 최소 인덱스값을 리턴하기때문이다.
2.nums
에 map 메소드를 사용해서 정렬된 배열의 인덱스 값으로 매핑해주면된다.