문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
1 ≤ indices의 길이 < my_string의 길이 ≤ 100
my_string은 영소문자로만 이루어져 있습니다
0 ≤ indices의 원소 < my_string의 길이
indices의 원소는 모두 서로 다릅니다.
my_string | indices | result |
---|---|---|
"apporoograpemmemprs" | [1, 16, 6, 15, 0, 10, 11, 3] | "programmers" |
입출력 예 설명
입출력 예 #1
예제 1번의 my_string의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 my_string a p p o r o o g r a p e m m e m p r s indices에 있는 인덱스의 글자들을 지우고 이어붙이면 "programmers"가 되므로 이를 return 합니다.
function solution(my_string, indices) {
return [...my_string].filter((_, idx) => !indices.includes(idx)).join('')
}
초반에 갈피를 제대로 잡지 못 했었다.
indices 요소가 my_string의 index값에 포함된건 추출하기 쉬웠으나 그 반대로하는데 어려웠다.
결국 다른 사람들이 작성한 문제를 보면서 풀었다ㅠ
우선 내가 해당 문제를 풀지 못했던 이유 중 하나는
includes가 문자열에만 사용할 수 있다고 생각했기 때문이다.
mdn에서 includes는 문자열에 사용하는 메소드라 소개되어 있어
문자열에만 사용가능한 줄 알았다.
허나... 문자는 유사배열... 그럼 배열에서도 사용이 가능했던 것...ㅠ
이후 다시 문제를 풀었을 때
my_string을 배열로 변경했다.
split('')
를 사용해 배열로 만들어 줄 수 있었지만 좀 더 간단하게 작성하기 위해
spread syntaxs로 작성해 간결하게 표현했다. [...my_string]
!indices.includes(idx)
는 indices에 해당 idx 값이 포함 되어 있지 않은 값만 반환하는걸 뜻한다.
includes 매개 변수의 값이 포함될 경우 true, 아닌 경우 false를 반환한다.
마지막으로 배열인 값을 join('')
해줘 문자열로 반환한다.
function solution(m, a) {
var answer = '';
for(let i = 0; i<m.length; i++){
if(!a.includes(i)){
answer += m[i]
}
}
return answer;
}
굳이 배열로 변환하지 않고 for문을 사용해 값을 반환할 수도 있다.
이번 문제의 핵심은 includes()를 아는지 모르는지에 따라 달라지는 것 같다.
이번 기회로 includes는 제대로 알고 간다.