문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
function solution(my_string, indices) {
let idx = indices.sort((a, b) => b - a);
let string = [...my_string];
for (let i=0; i<idx.length; i++) {
string.splice(idx[i], 1);
}
return string.join('');
}
indices를 건드리지 않으면... 자꾸 인덱스가 어긋나서 한참 고민하다...
const solution=(s,d)=>[...s].filter((v,i)=>!d.includes(i)).join('')
!d.includes(i)
)아...! filter 메서드를 사용하고 싶었는데 include()를 사용해야 했던 거구나...! 이렇게 하고 싶었던 거였어 ㅠㅠ
function solution(my_string, indices) {
const set = new Set(indices);
return [...my_string].filter((_, i) => !set.has(i)).join('');
}
filter()
메서드를 사용하여 인덱스가 Set에 포함되지 않은 문자들만 필터링한다.join('')
메서드를 사용하여 다시 문자열로 합친다.어?! 여긴 Set을 쓰네?! 나는 주로 중복 제거를 할 때만 Set을 사용했었기 때문에 여기서 왜 Set을 쓰는지 궁금했다.
배열의 검색 속도: 배열에서 특정 요소가 포함되어 있는지 확인하려면 includes()
메서드를 사용해야 한다. 이는 평균적으로 O(n)의 시간복잡도를 가진다. 따라서 배열의 길이가 길어질수록 검색 시간이 늘어난다.
Set의 검색 속도: Set은 해시 테이블을 기반으로 하여 요소를 저장하고 검색하기 때문에, 특정 요소가 Set에 포함되어 있는지 확인하는 작업이 평균적으로 O(1) 시간복잡도를 가진다. 즉, 검색 속도가 매우 빠릅니다.
따라서 배열에서 include() 메서드를 사용해 특정 요소를 검색해야 할 일이 있을 땐 Set을 사용하는 것이 성능 면에서 더 좋다.