본문 바로가기
기초다지기/JS 코딩테스트

javascript 배열 중복 제거후 변수 k의 길이만큼 자르거나 채우는 방법

by 김빵그 2023. 9. 11.

문제

주어진 정수 배열 arr에 있는 숫자는 순서대로 확인하며, 이전에 나온 적이 없는 숫자일 경우, 그 숫자를 새로운 배열에 추가한다.
만약 새로운 배열의 길이가 k보다 작을 경우 나머지 부분을 -1로 채운다
== 중복제거한 새 배열을 가져와 새 배열의 길이와 k를 비교하는 문제

코드 풀이

function solution(arr, k) {
    const set = new Set(arr);
    var array =[...set]; 
    if(array.length < k) {
        const count = k - array.length;
        for(let i = 0; i < count; i++) {
            array.push(-1);
        }
    }
    return array.slice(0, k) 
}

1. 배열 중복 제거 Set

  • const set = new Set(arr) 를 사용해서 배열 arr에 중복된 값을 제거한 후 set에 저장
  • var array = [...set] 중복이 제거된 값을 배열 array에 복사

1-1 Set ? 

  • javascript에서 제공하는 데이터 구조 중 하나로 중복된 값을 허용하지 않는 컬렉션
  • Set 객체는 값의 모음으로 세트의 값은 한 번만 발생할 수 있어 유일한 값을 저장할 때 유용하다 
  • new 키워드를 사용하는 것은 Set을 생성하고 초기화 하는 것
 

Set - JavaScript | MDN

The Set object lets you store unique values of any type, whether primitive values or object references.

developer.mozilla.org

2. k와 비교

  • array.length < k 조건을 사용하여 array 배열의 길이가 k보다 작하면 나머지 부분을 -1로 채운다

3. 배열 자르기

  • array.slice(0,k) 를 사용하여 최종 결과 배열 반환
  • 0부터 k까지 자르는 것

 

다른 코드

function solution(arr, k) {
  const set = new Set(arr);
  return set.size < k ? [...set, ...Array(k - set.size).fill(-1)] : [...set].slice(0, k);
}

1. set

  • set 중복 제거
  • set.size 를 통해 중복이 제거된 배열의 길이를 얻는다 
  • 배열의 길이와 k를 비교

2. 스프레드 ... 연산자

const solution = (arr, k) => {
    const set = new Set(arr);
    const result = [...set].slice(0,k);
    while(result.length !== k){
        result.push(-1);
    }
    return result;
}

 

 

 

1. while

  • 배열의 길이가 k가 될 때까지 배열의 끝에 -1을 추가 
  • while(result.length !== k) result 배열의 길이가 k가 아니라면 루프가 계속 심ㄹ행
function solution(arr, k) {
    return [...Array.from(new Set(arr)), ...new Array(k).fill(-1)].slice(0,k);
}

1. Array.from ()

  • 유사 베열 객체나 반복 가능한 객체를 배열로 변환하는 역할
  • Set 객체는 반복 가능한 객체이므로 set 객체를 배열로 변환하여 중복이 제거된 배열을 얻는 것

2. new Array

  • new Array(k) : 길이가 k인 배열을 생성. 이 배열은 초기값이 없으므로 모든 요소가 undefined로 채워진다