Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 우분투 시간 변경
- sql 문자열 패턴 검색
- ubuntu타임존
- 리엑트블로거
- sql like연산자
- 레디스 확인
- Robo3T 폰트 키우기
- ...점점점문법
- 객체의 밸류값만 찾기
- ${변수}
- 코딩 어?
- 객체의키값만 찾기
- 배열을 객체로
- findIndex()
- 객체를 배열로
- Robo3T 폰트변경
- 가상컴퓨터마법사
- 프론트엔드 스쿨
- indexOf()
- search()
- @Moditying @Query
- lastIndexOf()
- 시퀄 문법
- 스프링 데이타 JPA
- 깃 토큰 만료
- Robo3T 글씨체 변경
- 5.3.8 Modifying Queries
- Robo3T 글씨키우기
- 문자열 인터폴레이션
- js 문자열을 문자배열로
Archives
- Today
- Total
코딩기록
replace) 특정 문자 제거 / 문자열에서 특정 문자(✨단일문자) 제거 - for, for...of(유사배열객체, 문자열), filter, reduce //✅매개변수 정규표현식(regExp)에 쓸땐 생성자로(new RegExp() ) + replace // [단일문자에서 includes, indexOf 사용할 필요❌] 본문
프론트/JS)코딩테스트
replace) 특정 문자 제거 / 문자열에서 특정 문자(✨단일문자) 제거 - for, for...of(유사배열객체, 문자열), filter, reduce //✅매개변수 정규표현식(regExp)에 쓸땐 생성자로(new RegExp() ) + replace // [단일문자에서 includes, indexOf 사용할 필요❌]
뽀짝코딩 2024. 9. 25. 21:24728x90
문제 설명
문자열 str과 문자 letter이 매개변수로 주어집니다. str에서 letter를 제거한 문자열을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ str의 길이 ≤ 100
- letter은 길이가 1인 영문자입니다.
- str과 letter은 알파벳 대소문자로 이루어져 있습니다.
- 대문자와 소문자를 구분합니다.
입출력 예
str letter result
"abcdef" | "f" | "abcde" |
"BCBdbe" | "B" | "Cdbe" |
입출력 예 설명
입출력 예 #1
- "abcdef"에서 "f"를 제거한 "abcde"를 return 합니다.
입출력 예 #2
- "BCBdbe"에서 "B"를 모두 제거한 "Cdbe"를 return 합니다.
const solution = (str, letter) => {
// do something
};
console.log(solution('abcdef', 'f')); // 'abcde'
console.log(solution('BCBdbe', 'B')); // 'Cdbe'
풀이
1번 풀이 for문
✨✨for문으로 특정 문자 제거할 땐 인덱스가 같은지 확인할 것✨✨
// 1번 풀이 for - 특정 문자 제거할땐 인덱스가 같은지 확인할것,
const solution1 = (str, letter) => {
let src = '';
for (let i = 0; i < str.length; i++) {
if (str[i] !== letter) src += str[i];
};
return src;
};
console.log(solution1('abcdef', 'f')); // 'abcde'
console.log(solution1('BCBdbe', 'B')); // 'Cdbe'
2번 풀이 for...of
for... of로 str문자열을 돌면서 요소 c와 letter가 같은지 비교하고
같으면 res빈문자열에 하나씩 더한다.
// 2번 풀이 for...of
const solution2 = (str, letter) => {
let res = '';
for (const c of str) {
if (c !== letter) res += c;
};
return res;
};
console.log(solution2('abcdef', 'f')); // 'abcde'
console.log(solution2('BCBdbe', 'B')); // 'Cdbe'
3번 풀이 forEach
forEach를 통해 문자열을 순회하면서
- !== : 요소c(현재문자)와 인수letter가 다를 경우, 빈문자열res에 요소c를 하나씩 더해서 반환한다.
- includes : 문자열에서 서브 문자열을 찾는 메서드. c는 이미 단일 문자이기 때문에 indexOf()를 사용할 필요가 없음.
- indexOf : 문자의 위치(인덱스)를 반환하며, 찾지 못하면 -1을 반환. c가 문자이므로, letter가 c에 있을 수 없고, indexOf()는 단일 문자에서 사용할 필요가 없음.
즉, 문자열에서 문자를 찾을 때 찾는 문자가 단일 문자면 includes, indexOf 사용할 필요 없음.
// 3번 풀이 - forEach
const solution3 = (str, letter) => {
let res = '';
[...str].forEach(c => {
if (c !== letter) res += c;
});
return res;
};
console.log(solution3('abcdef', 'f')); // 'abcde'
console.log(solution3('BCBdbe', 'B')); // 'Cdbe'
4번 풀이 filter
계속 filter인자를 요소, 인덱스 두 개를 써서 했는데
제거문자가 단일 문자일 땐 요소로 접근해야 한다고 한다.
인덱스로 접근할 필요가 없다.
// 4번 풀이 filter - 제거문자가 단일 문자일땐 요소로 접근!!. 인덱스로 접근할 필요없음.
const solution4 = (str, letter) => {
return [...str].filter((c) => c !== letter).join('');
};
console.log(solution4('abcdef', 'f')); // 'abcde'
console.log(solution4('BCBdbe', 'B')); // 'Cdbe'
5번 풀이 정규표현식 regExp + replace
정규표현식을 사용할 때 매개변수를 어떻게 사용해야 하는지 조금 헤맸다.
const reg = /[letter]/g;
이렇게 작성하니 vscode에서 letter매개변수 색상이 죽어있고(잘못 씀, 오류)
고민하다 쳇지피티에게 물어보니
정규 표현식을 생성자를 사용해 동적으로 생성하는 방법을 알려주었다.
아❗❗❗❗ 크~ 하나 또 배웠다.
❗✨정규표현식에서 매개변수를 사용할 때는 new RegExp(매개변수, 'g');❗
('g'는 전역플래그)
❗✨문자열에서 특정문자를 모두 제외하려면 replace는 한 번만 실행되기 때문에 g플래그를 써야 함.
// 5번 풀이 정규표현식-replace(변수명, '');
const solution5 = (str, letter) => {
// 정규표현식 리터럴 방식을 추구했으나 잘못사용함.실패
// const reg = [letter] / g;
// const reg = /[fB]/g; // 정규표현식 리터럴로 f,B모두 찾는 방법
// 매개변수를 정규표현식에 쓸때는 정규표현식생성자(동적)
// replace는 한 번만 실행되기 때문에 전역을 뜻하는 g플래그를 써야함.
const regExp = new RegExp(letter, 'g');
return str.replace(regExp, '');
};
console.log(solution5('abcdef', 'f')); // 'abcde'
console.log(solution5('BCBdbe', 'B')); // 'Cdbe'
6번 풀이 reduce
reduce는 삼항연산자로 푸는 방식과 if문으로 푸는 방식 두 가지를 적었다.
if문으로 풀 때 return과, 두 번째 인자로 초기값 설정을 항상 잊는다.
reduce! 두번째 인자 초기값 설정!!
// 6번 풀이 reduce1
const solution6 = (str, letter) => {
return [...str].reduce((acc, cur) => cur !== letter ? acc += cur : acc, '');
};
// reduce2
const solution7 = (str, letter) => {
return [...str].reduce((acc, cur) => {
if (cur !== letter) acc += cur;
return acc;
}, '');
}
console.log(solution6('abcdef', 'f')); // 'abcde'
console.log(solution6('BCBdbe', 'B')); // 'Cdbe'
참고
나, 쳇지피티
반응형
'프론트 > JS)코딩테스트' 카테고리의 다른 글
Comments