문제
주어진 정수 배열 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로 채워진다
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
Palindrome Number (0) | 2023.10.04 |
---|---|
javascript 2차원 배열 내 리스트에 id, pw가 있는지 찾고 일치 여부에 따른 메세지 반환 (0) | 2023.09.12 |
javascript 영문으로 표기된 숫자 문자열을 숫자의 수로 변경하기 (0) | 2023.08.26 |
[javascript] for..of / for문 / indexOf를사용한 알파벳 등장 횟수 계산 (0) | 2023.08.25 |
javascript 조건에 맞게 수열 변환 (0) | 2023.08.22 |