2022-Sep-14, today getting of my comfort zone.
오늘은 주어지는 임의의 정수 배열에서 서로 다른 인덱스의 숫자를 뽑아 더한 값을, 중복없이 오름차순으로 정렬하는 함수를 작성했다.
서로 다른 인덱스의 숫자를 뽑는 알고리즘은 전에 한 번 해봐서 바로 구현할 수 있었는데, '중복없이 오름차순'에서 삽질했다....
new Set(array);
에 대한 정확한 이해없이 '그냥~ 중복 없애주는 거'라고 하고 넘어갔던 것. 그리고 sort 메서드를 배열이 아닌, 위에서 만든 Set object에 적용했던 것. 두 가지 때문에 헤맸다. 다시 한 번 정확히 공부해보자.
전개 연산자(Spread Operator)
전개 연산자란 말 그대로 배열 또는 객체의 요소들을 하나씩 펼쳐 넘겨주는 역할을 수행한다. 예를 들어 아래 코드를 살펴보자.
let array = [1,2,3];
let array_1 = [4,5,6];
let array_2 = [7,8,9];
array_1.push(array));
array_2.push(...array));
전개 연산자를 사용한 것과 사용하지 않은 것 둘의 결과값은 어떻게 달라질까?

1번 같은 경우, array 배열 하나가 통째로 push된다.
그러나 2번 처럼 전개 연산사를 사용했을 경우, 배열 요소가 펼쳐져 하나씩 push 된다.
Set 객체
new Set(만들고 싶은 배열)
위와 같은 생성자 함수로 Set 객체를 만들 수 있으며, Set 객체는 중복된 값이 존재하지 않는 배열이다. 일반 배열이 아니며, Object로 보는 것이 맞다.(length 말고 size, 오브젝트 처럼 { } 로 묶임)

Sort method
Sort 메서드 사용법은 많이 다뤘기 때문에 생략하겠다.
문제가 됐던 부분은 new Set 으로 생성했던 Set 배열에 Sort 메서드가 적용되지 않았다는 것이다.(아래 그림 참고)

왜 안될까? 아마도, Set으로 만들어진 배열이 Object이기 때문일 것이다. 그래서 혹시나 해서... Set 배열의 요소들이 Unique하다는 점을 떠올려 아래와 같이 코드를 작성해봤는데...

Object에서의 key 값들은 Unique 하다는 것을 떠올려 해봤는데 된다.
그 밖에도 Sort가 적용되지 않아 사용했던 해결책 두 가지를 더 정리해보겠다.


느낀점
문제의 난이도 자체는 쉬웠으나, 간단한 연산자와 배열 구조에 대한 정확한 이해가 없었던 탓에 시행착오를 겪었다. 이를 계기로 알고 활용하는 것이 중요하다는 것을 느낄 수 있었다..
기본에 충실하자.
끝