이번 포스팅에서는 배열의 전체 길이는 그대로 유지하면서 중복된 요소를 모두 제거하고, 제거된 자리만큼 빈 문자열('')을 배열 끝에 채워 넣는 함수를 JavaScript로 작성하는 방법을 알아보겠습니다.
문제 정의
함수는 하나의 배열을 입력으로 받아 다음과 같이 동작해야 합니다.
- 배열에서 중복된 값들을 모두 제거합니다.
- 제거된 중복 값의 개수만큼 빈 문자열을 배열 끝에 추가하여 최종 길이가 원래 배열과 같도록 만듭니다.
예를 들어, 중복으로 인해 4개의 값이 제거되었다면, 해당 값들을 삭제한 후 배열 끝에 빈 문자열 4개를 이어 붙여야 합니다.
구현 예제
다음은 위 로직을 구현한 코드입니다.
const arr = [1,2,3,1,2,3,2,2,3,4,5,5,12,1,23,4,1];
const deleteAndInsert = arr => {
const creds = arr.reduce((acc, val, ind, array) => {
let { count, res } = acc;
if(array.lastIndexOf(val) === ind){
res.push(val);
}else{
count++;
}
return {res, count};
}, {
count: 0,
res: []
});
const { res, count } = creds;
return res.concat(" ".repeat(count).split(" "));
};
console.log(deleteAndInsert(arr));코드 설명
- reduce() 메서드: 배열을 순회하면서 각 요소가 마지막 등장 위치인지 확인합니다.
lastIndexOf(val) === ind조건은 해당 값이 현재 인덱스에서 마지막으로 나타난다는 의미이므로, 결과 배열res에 값을 추가합니다. - count 증가: 조건에 해당하지 않는 경우(즉, 뒤에 동일한 값이 더 있는 경우)에는 중복으로 판단하여
count를 1씩 증가시킵니다. - 빈 문자열 생성: 최종적으로
" ".repeat(count).split(" ")를 통해 중복 개수만큼의 빈 문자열 배열을 만들고,concat()으로 결과 배열 뒤에 연결합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.
[
2, 3, 5, 12, 23, 4, 1,
'', '', '', '', '', '', '',
'', '', '', ''
]출력 결과를 보면 원본 배열의 고유한 값들(2, 3, 5, 12, 23, 4, 1)이 앞쪽에 배치되고, 제거된 중복 항목 수(10개)만큼의 빈 문자열이 뒤에 채워져 있어, 전체 배열 길이는 원본과 동일하게 유지됩니다.