코딩테스트(JavaScript)/코딩테스트 입문
프로그래머스-특정 문자 제거하기
paintover23
2023. 8. 21. 12:05
728x90
// 오답: 실행시간 10초 이상 소요
function solution(my_string, letter) {
var answer = '';
for (let i = 0; i < my_string.length; i++) {
while (my_string[i] === letter) {
answer = my_string.replace(letter, '');
}
}
return answer;
}
[오답노트]
- replace 메소드와 정규 표현식을 사용할 경우 for 루프는 필요하지 않다.
// 오답: 테스트 케이스 1개만 통과
function solution(my_string, letter) {
let answer = '';
for (let i = 0; i < my_string.length; i++) {
if (my_string[i] === letter) answer = my_string.replace(/letter/g, '');
}
return answer;
}
[오답노트]
- 문제에서 전역에서 특정문자를 제거하라고 제시했기 때문에, 전역에서 문자 찾는 로직이 필요하다.
- 하지만, 다음과 같이는 사용할 수 없다. letter가 변수로 인식되지 않고 하나의 문자열 값으로 인식되어 정상 동작하지 않기 때문my_string.replace(/letter/g, "");
[해결방법]
// 정답
function solution(my_string, letter) {
return my_string.replace(new RegExp(letter, 'g'), "");
}
따라서, 위와 같이 동적으로 변하는 문자열을 찾을 때는 정규 표현식 객체 생성자를 이용해야한다.
replace 안에 변수를 넣을 수 있다. 또는 아래와 같이 풀어쓸 수도 있다.
function solution(my_string, letter) {
let regexAll = new RegExp(letter, 'g')
return my_string.replace(regexAll, "")
}
다음은 정규표현식의 다양한 활용법이다.
let regexOne = new RegExp(pattern); // 일치하는 패턴 중 최초 등장하는 패턴 한 번만 찾음
let regexAll = new RegExp(pattern, "g"); // 모든 패턴을 찾음
let regexAllCase = new RegExp(pattern, "gi"); // 대소문자 구분 없이 모든 패턴을 찾음
[참고자료]
https://jess2.xyz/JavaScript/variable-regex/
728x90
반응형