유효한 팰린드룸
알고리즘 공부 간 기록이 필요한 문제들에 대한 정리를 기록하는 포스트 입니다.
1. 문제 요건
영문, 숫자, 문자로 섞인 문자열(String) 이 주어지고 이에 대한 회문문자열에 대한 정합성 즉, 유효한 팰린드룸을 확인한다.
2. 코드
//ASCII Code 값 비교를 통한 문자 제거
function solution(str) {
let answer = "YES"
// 정규식 사용 a-z 가 아닌것들을 모두 삭제
str = str.toLowerCase().replace(/[^a-z]/g, '')
// 문자열 reverse 일치 확인
if(str !== str.split('').reverse().join('')) {
return "NO"
}
return answer
}
//정규식을 이용한 문자 제거
function solution2(str) {
let answer = "YES"
// 영어 아닌 값 자르기
for(let i=0; i<str.length; i++) {
if((str[i].charCodeAt() < 65 || str[i].charCodeAt() > 122)) {
str = str.replace(str[i], '')
i -= 1
}
}
// 리버스 함수를 통해 일치 확인
if(str.toLowerCase() !== str.toLowerCase().split('').reverse().join('')) {
return "NO"
}
return answer
}
3. 결과정리
유효한 팰린더룸 문제는 어떤 문장에 대해 앞으로 읽으나 뒤로 읽으나 동일하다는 것을 확인하는 것이다.
이 문제는 정규식을 안다면 solution2 와 같이 아주 간단하게 풀 수 있다. 정규식이 바꿀 수 있는 코드의 간결함에 대해 다시한번 느낄 수 있는 문제이다. 이 문제가 아니더라도 정규식은 계속해서 공부하고 사용해보면서 익혀야겠다.
4. Key Point
이번 문제에서 기억해야 할 부분은 크게 2가지가 있다.
- 정규식
- 내장함수에 대한 이해 및 활용(split, reverse, join)
for(let i=0; i<str.length; i++) {
if((str[i].charCodeAt() < 65 || str[i].charCodeAt() > 122)) {
str = str.replace(str[i], '')
i -= 1
}
}
-----------------------------------------
str = str.toLowerCase().replace(/[^a-z]/g, '')