자바스크립트 코딩테스트 강좌, 집합 표현하기

1. 문제 설명

주어진 배열에서 중복되지 않는 요소들의 집합을 만들어 반환하는 문제입니다. 이 문제는 자바스크립트를 사용하는 코딩 테스트에서 자주 출제되는 유형으로, 집합(Set)의 개념을 이해하는 데 도움이 됩니다.

2. 문제 정의

**문제:** 배열을 입력으로 받아 중복을 제거한 새로운 배열을 반환하는 function uniqueElements(arr) 함수를 작성하세요.

        
            // 예시 입력
            uniqueElements([1, 2, 2, 3, 4, 4, 5]); // 반환: [1, 2, 3, 4, 5]
            uniqueElements(['apple', 'banana', 'apple']); // 반환: ['apple', 'banana']
        
    

3. 접근 방식

이 문제를 해결하기 위해 다양한 방법을 사용할 수 있습니다. 하지만, 자바스크립트에서 집합의 특성을 활용하는 것이 가장 효율적입니다. 집합(Set) 자료 구조는 유일한 값을 저장하므로 중복을 자동으로 제거해준다는 특성이 있습니다.

3.1. 방법 1: Set 객체 사용

Set 객체를 사용하여 중복을 제거하는 방법은 매우 직관적입니다. Set에 배열을 전달하면, 중복이 제거된 Set 객체를 얻을 수 있고, 이를 다시 배열로 변환하여 결과를 반환할 수 있습니다.

        
            function uniqueElements(arr) {
                return [...new Set(arr)];
            }
        
    

3.2. 방법 2: 필터와 인덱스 사용

다른 방법으로는 배열의 filter 메서드를 사용하여 중복을 제거할 수 있습니다. 이 방법은 각 요소가 처음 나타나는 인덱스와 현재 인덱스를 비교하여 중복 여부를 판별할 수 있습니다.

        
            function uniqueElements(arr) {
                return arr.filter((item, index) => arr.indexOf(item) === index);
            }
        
    

3.3. 방법 3: 객체를 활용한 중복 제거

객체를 사용하여 성능적으로 효율적인 방법으로 중복을 제거할 수 있습니다. 각각의 요소를 키로 삼아 객체에 저장하고, 마지막에 이 객체의 키들만으로 새로운 배열을 만들면 됩니다.

        
            function uniqueElements(arr) {
                const uniqueObj = {};
                
                arr.forEach(item => {
                    uniqueObj[item] = true;
                });
                
                return Object.keys(uniqueObj);
            }
        
    

4. 코드 구현

위에서 설명한 방법 중 첫 번째 방법인 Set을 사용한 구현 예제를 아래에 작성하였습니다.

        
            function uniqueElements(arr) {
                return [...new Set(arr)];
            }

            // 테스트
            console.log(uniqueElements([1, 2, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]
            console.log(uniqueElements(['apple', 'banana', 'apple'])); // ['apple', 'banana']
        
    

5. 시간 복잡도 분석

모든 방법의 시간 복잡도는 O(n)입니다. 여기서 n은 배열의 길이를 의미합니다. Set을 사용하는 방법이 가장 간결하고 직관적이며, ES6에서 제공하는 기능이므로 코드 가독성 또한 좋습니다. 필터 또는 객체를 사용하는 방법은 추가적인 메모리 사용이 있을 수 있습니다.

6. 결론

이번 문제를 통해 자바스크립트에서 집합의 개념을 이해하고, 배열의 중복을 제거하는 여러 가지 방법을 배웠습니다. 코딩 테스트에서 이러한 문제는 흔하게 출제되므로, 사용할 수 있는 자료 구조와 알고리즘을 미리 숙지해두는 것이 중요합니다. Set과 같은 ES6의 새로운 기능을 이해하고 활용하는 것이 코드를 더 깔끔하게 작성하는 데 도움이 됩니다.

7. 추가 연습 문제

다음과 같은 문제가 또 있을 수 있습니다:

  • 배열에서 중복된 요소의 개수를 구하는 함수 작성하기
  • 두 개의 배열에서 공통된 요소 찾기
  • 문자열에서 중복되지 않은 문자 세기

이러한 문제들을 풀어보며 자바스크립트의 다양한 기능을 익히는 데 도움이 되길 바랍니다.