사실 이 문제는 풀지 못했습니다.
하나에 수식 4개를 사용해서 뭔가 알아둘 게 많기에 포스트로 적습니다.
풀이한 식은 적지 않겠습니다.
문자열 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 합니다.
이 코드의 역할은 주어진 문자열 my_string에서 특정 인덱스에 있는 문자들을 제거하고, 나머지 문자들을 결합하여 새로운 문자열을 생성하는 것입니다. 코드를 한 줄씩 분석해 보겠습니다.
[...my_string];
my_string을 배열로 변환합니다. 스프레드 연산자 ...는 문자열을 개별 문자로 분리하여 배열로 만듭니다. 예를 들어, "apporoograpemmemprs"는 ['a', 'p', 'p', 'o', 'r', 'o', 'o', 'g', 'r', 'a', 'p', 'e', 'm', 'm', 'e', 'm', 'p', 'r', 's']가 됩니다.
map((a, idx) => indices.includes(idx) ? 0 : a);
배열의 각 요소(a)와 그 인덱스(idx)를 이용해 새로운 배열을 생성합니다. a는 현재 문자, idx는 현재 문자의 인덱스입니다. indices.includes(idx)는 현재 인덱스 idx가 indices 배열에 포함되어 있는지 포함되면 0, 포함되지 않으면 a를 반환합니다.
결과적으로, indices 배열에 포함된 인덱스에 있는 문자는 0으로 바뀝니다.
filter(a => a !== 0);
이전 단계에서 생성된 배열에서 0이 아닌 요소들만 걸러냅니다.
즉, indices 배열에 포함된 인덱스 위치에 있던 문자들은 제거됩니다.
join('');
필터링된 배열을 다시 문자열로 결합합니다.
배열의 모든 요소를 빈 문자열 ''로 결합하여 하나의 문자열로 만듭니다.
전체 코드의 역할
이 코드의 목적은 my_string의 특정 인덱스 위치에 있는 문자를 제거하고, 나머지 문자를 결합하여 새로운 문자열을 생성하는 것입니다.
예제
my_string = "apporoograpemmemprs"
indices = [1, 16, 6, 15, 0, 10, 11, 3]
my_string을 배열로 변환:
['a', 'p', 'p', 'o', 'r', 'o', 'o', 'g', 'r', 'a', 'p', 'e', 'm', 'm', 'e', 'm', 'p', 'r', 's'];
map 함수를 통해 인덱스가 indices 배열에 포함된 위치를 0으로 바꿈:
[0, 0, 'p', 0, 'r', 'o', 0, 'g', 'r', 'a', 0, 0, 'm', 'm', 'e', 0, 0, 'r', 's'];
filter 함수를 통해 0을 제거:
['p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'e', 'r', 's'];
join 함수를 통해 배열을 문자열로 결합:
"programmers"
따라서 최종 결과는 "programmers"가 됩니다.
정리
이 코드는 my_string에서 indices 배열에 포함된 인덱스 위치의 문자를 제거하고 나머지 문자들을 이어붙여 새로운 문자열을 생성합니다.