JavaScript/알고리즘

프로그래머스 중복된 문자 제거 JS ( set객체, new Set() )

hihiha2 2023. 7. 1. 03:11

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

 

 

 

✅ 내 코드

function solution(my_string) {
    return [...new Set(my_string)].join('')
}

이터러블에서 중복된 값을 제거하는것을 쉽게해주는 메서드가 있다. 바로 new Set()이다. 

이런 메서드가 있는건 알았는데 나도 이렇게 사용해본적은 처음이라서 정리해보았다.

 

 

 

 

💻 학습한 것

new Set():  new Set()은 JavaScript의 내장 객체인 Set을 생성하는 방법 중 하나

  • new Set()을 호출하여 빈 Set 객체를 생성할 수 있다
  • Set 객체는 중복된 값을 허용하지 않고, 값을 저장한 순서를 유지하는 자료구조
  • 다양한 값을 Set에 추가하고, 해당 값들을 확인하고, 제거하는 등의 작업을 수행할 수 있다

 

set은 자바스크립트의 내장객체중의 하나로 중복된 값을 허용하지 않는 성질이 있다. 

new Set(iterable)

위와 같이 이터러블한 값을 new Set을 통해서 Set객체로 만들 수 있다.

➡️ 이런 성질을 이용하면, 이터러블한 값에서 중복된 값을 쉽게 제거할 수 있다.

 

 

Set의 내부

set 내부구조가 어떻게 생겼는지 궁금해서 console.log를 통해서 확인해보았다.

function solution(my_string) {
    let set = new Set(my_string)
    console.log(set)
}

테스트를 통해 출력된 값을 보면, {}객체안에 각각의 요소들이 나뉘어서 담겨져있는 것을 알 수 있다.

 

 

Array와의 관계

var myArray = ['value1', 'value2', 'value3'];

// Array를 Set으로 변환하기 위해서는 정규 Set 생성자 사용
var mySet = new Set(myArray);

mySet.has('value1'); // true 반환

// set을 Array로 변환하기 위해 전개 연산자 사용함.
console.log([...mySet]); // myArray와 정확히 같은 배열을 보여줌

Array를 Set으로 변환하기 위해서 new Set() 생성자를 이용하는 것과 반대로,

Set을 Array로 변환하기 위해서는 ...전개연산자를 사용한다. 

 

 

Set객체의 메서드

Set 객체는 add(), has(), delete(), size 등의 메소드와 속성을 제공

이를 사용하여 값을 추가, 확인, 제거하고 Set의 크기를 확인할 수 있다.

const mySet = new Set();

mySet.add('apple');
mySet.add('banana');
mySet.add('orange');

console.log(mySet.has('apple'));  // true
console.log(mySet.size);  // 3

mySet.delete('banana');
console.log(mySet.size);  // 2

 

 

 

다시 코드를 보면,

function solution(my_string) {
    return [...new Set(my_string)].join('')
}

new Set생성자를 이용해서 my_string을 set객체로 만들어준다. 그런 다음 ...전개연산자를 사용해서 배열로 바꾼다.

여기까지만 하고 테스트를 통해 확인해보면, 아래와 같이 각각 요소가 나뉘어져서 배열안에 담겨있는 것을 확인할 수 있다. 

 

마지막으로 이렇게 나뉘어진 값을 join('')을 통해 하나의 문자열로 바꿔준다.

 

 

 

🙋‍♀️ 내 생각

이터러블한 값에서 중복값을 매우 쉽게 제거가 가능한데, 중복된 값을 허용하지 않는 set객체의 특성을 이용하면 된다.

new Set()생성자를 이용하여 이터러블한 값을 set객체로 바꾼다. 

{'a', 'b', 'c'}와 같이 생성되기때문에 활용하기 위해서는 array로 바꿔주어야한다. 이런 경우 ...전개연산자를 사용하면 된다.

 

문제를 풀면서 set객체에 대해서 이해했다. 중복값을 제거하는데 매우 간편하고 이용하기도 엄청 쉬웠다.

has나 add같은 여러가지 특성들이 더 있는데 다른 문제를 해결하면서 사용해봐야겠다.

 

 

 

 

 

참고

 

Set - JavaScript | MDN

Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.

developer.mozilla.org