배열의 원소 삭제하기

https://school.programmers.co.kr/learn/courses/30/lessons/181844

문제 설명

정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.

입출력 예시

내 코드 _ 방법1(set을 이용한 풀이. 차집합)

function solution(arr, delete_list) {
    var answer = [];
    let setA=new Set(arr)
    let setB=new Set(delete_list)

    Set.prototype.difference = function (set) {
        return new Set([...this].filter(v => !set.has(v)));
      };
      
return Array.from(setA.difference(setB));

}

console.log(solution([293, 1000, 395, 678, 94],[94, 777, 104, 1000, 1, 12]))
console.log(solution([110, 66, 439, 785, 1],[377, 823, 119, 43]))

코드 풀이

function solution(arr, delete_list) {
    var answer = [];
// arr 배열과 delete_list 배열은 Set 객체로 만들어 준다.
    let setA=new Set(arr)
    let setB=new Set(delete_list)

// Set객체에 difference 메서드를 만들어주어 
    Set.prototype.difference = function (set) {
// 여기서 [...this]는 setA를 배열로 만들어준 것이다.
// setA배열을 filter로 배열을 순회하여 setB에 특정 요소가 존재하지 않는 것들을  
// 다시 Set객체로 만들어 준다. -> 굳이 Set 객체로 안 만들어도 된다. 
        return new Set([...this].filter(v => !set.has(v)));
      };
      
// set객체 배열로 만들기
return Array.from(setA.difference(setB));

// set객체 배열로 만드는 다른 방법
//let result= setA.difference(setB);
//      result.forEach(e=>answer.push(e))
//      return answer;

}

console.log(solution([293, 1000, 395, 678, 94],[94, 777, 104, 1000, 1, 12]))
console.log(solution([110, 66, 439, 785, 1],[377, 823, 119, 43]))

내 코드_방법2(set을 이용한 풀이.차집)

function solution(arr, delete_list) {
    var answer = [];
    let setA=new Set(arr)
    let setB=new Set(delete_list)
    
    Set.prototype.difference=function(set){
// 여기서 this는 setA이다.
        let result = new Set(this);
//setB를 순회하여
     for(let x of set){
//setA에 setB의 요소를 제거해준다.
           result.delete(x)
       }
        return result;
     }
   // set객체를 배열로 만들어 준다.
    return [...setA.difference(setB)];

}

console.log(solution([293, 1000, 395, 678, 94],[94, 777, 104, 1000, 1, 12]))
console.log(solution([110, 66, 439, 785, 1],[377, 823, 119, 43]))

코드 풀이

function solution(arr, delete_list) {
    var answer = [];
    let setA=new Set(arr)
    let setB=new Set(delete_list)
    
    Set.prototype.difference=function(set){
        let result = new Set(this);
     for(let x of set){
           result.delete(x)
       }
        return result;
     }
   
    return [...setA.difference(setB)];

}

console.log(solution([293, 1000, 395, 678, 94],[94, 777, 104, 1000, 1, 12]))
console.log(solution([110, 66, 439, 785, 1],[377, 823, 119, 43]))

Set관련 자세한 설명 링크

https://velog.io/@dolarge/Java-Script-Set-%EA%B3%BC-Map

0개의 댓글