프론트/JS)코딩테스트
string) 글자 지우기 / for...of + slice, for + includes, filter - 배열 값/ 인덱스에 해당하는 문자 제거 or 배열 값/ 인덱스에 해당하지 않는 문자로 새로운 문자열 생성
뽀짝코딩
2024. 8. 12. 00:49
728x90
문제 설명
문자열 str과 정수 배열 indices가 주어질 때, str에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ indices의 길이 < str의 길이 ≤ 100
- str은 영소문자로만 이루어져 있습니다
- 0 ≤ indices의 원소 < str의 길이
- indices의 원소는 모두 서로 다릅니다.
입출력 예
str
|
indices
|
result
|
"apporoograpemmemprs"
|
1, 16, 6, 15, 0, 10, 11, 3]
|
"programmers"
|
입출력 예 설명
입출력 예 #1
- 예제 1번의 str의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
str a p p o r o o g r a p e m m e m p r s
const solution = (str, indices) => {
// do something
};
console.log(solution('apporoograpemmemprs', [1, 16, 6, 15, 0, 10, 11, 3])); // 'programmers'
풀이
1번 풀이 filter, includes
특정 인덱스에 해당하지 않는 문자로 새롭게 문자열 생성.
- 문자열을 문자배열로 변경시 str.split('') 보다 [...str] 스프레드 문법이 더 간편하다.
- includes는 true / false 불린형으로 결과를 반환한다.
- str의 1, 16 ...인덱스가 true로 나오고
- 그 결과가 join('')으로, 문자열로 붙여 반환된다.
// str문자열에 indices가 포함되지 않은 문자열만 반환.
const solution3 = (str, indices) => {
// 특정 인덱스에 해당하지 않는 문자로 새롭게 문자열을 생성
return [...str].filter((_, i) => !indices.includes(i)).join('');
};
console.log(solution3('apporoograpemmemprs', [1, 16, 6, 15, 0, 10, 11, 3])); // 'programmers'
2번 풀이 for, inlcudes
특정 인덱스에 해당하지 않는 문자로 새롭게 문자열 생성.
- for문의 i는 index인덱스라는 0,1,2,3 배열의 순서를 의미한다.
- 인덱스 0 부터 str길이만큼 인덱스를 하나씩 추가하며 돈다.
- includes(i), str[i]의 i는 [1, 16 , 6, 15...] 이 배열안 요소(값)을 의미한다.
- str에 indices의 i는 1이라는 값이 포함되어 있지 않으면 res라는 식별자로 만든 빈문자열에
- 문자를 하나하나 추가해서 p+r+o+.... 'programmers'라는 문자열을 만들어 반환한다.
const solution2 = (str, indices) => {
let res = '';
for (let i = 0; i < str.length; i++) {
if (!indices.includes(i)) res += str[i];
}
return res;
};
console.log(solution2('apporoograpemmemprs', [1, 16, 6, 15, 0, 10, 11, 3])); // 'programmers'
3번 풀이 for...of, slice
특정 인덱스의 문자를 제거
- indices 배열을 내림차순으로 정렬하면 16, 15, 11, 10 ... 큰 숫자부터 앞으로 온다.
- for...of의 i는 indices 배열의 각 요소를, 즉 indices 배열의 각 값을 차례대로 가져온다.
- slice(0,i)는 0부터 i번째 인덱스 전까지의 값을 가져온다(i미포함).
- slice(0, 1) 이면 1의앞인 인덱스0을 가져온다.
- slice(i + 1)은 i + 1번째 인덱스부터 끝까지의 값을 가져온다.
- slice(2)면 인덱스2 부터 끝까지인 'poroograpemmemprs' 값을 가져온다.
- 가져온 두 값을 합해 str에 담아 반환한다.
// 특정 인덱스의 문자를 제거
const solution1 = (str, indices) => {
// indices 배열을 내림차순으로 정렬
indices.sort((a, b) => b - a);
// 각 인덱스에 해당하는 문자를 순차적으로 제거
for (const i of indices) {
// console.log(1111, str.slice(i + 1));
str = str.slice(0, i) + str.slice(i + 1);
}
return str;
};
console.log(solution1('apporoograpemmemprs', [1, 16, 6, 15, 0, 10, 11, 3])); // "programmers"
반응형