JS 알고리즘 문제풀이/섹션 3. 문자열 탐색

2.유효한 팰린드롬

crab. 2022. 1. 13. 11:34

📌강의 정리

회문문자열은 영어로 팰린드롬이다.

이번에는 알파벳만 비교해야 한다.

내장함수로 풀어보자.

우선 YES NO 로 받으니 앤서를 예스로 해놓고 소문자화한다음에

리플레이스를 해서 알파벳만 놔두고 나머지문자는 다 없앤다.

이 과정은 정규식으로 쉽게 표현할 수 있다.

/[^a-z]/g을 하면 된다. 꺽쇠는 부정의 의미이므로 그 이외의 것들을 다 없애라는 뜻이 된다. g는 글로벌영역 전체를 의미한다.

그 다음엔 빈문자를 넣어주면 된다.

s=s.toLowerCase().replace(/[^a-z]g, '');

를 하면 소문자로 문자만 남길 수 있다.

이제 전에 스플릿과 리버스와 조인을 써서 다시 s와 비교하면 손쉽게 풀 수 있다.

이 문제는 리플레이스에서 정규식이용이 중요하다.

📌느낀점

이제는 정규식과 메서드를 피할 수 없다.

편하고 간결한게 매우 확실하다.

조금의 매서드를 잘 다듬고 외워서 효과적으로 응용할 수 있도록 노력해야 한다.

//나의 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){
                let answer="YES";
                let len = s.length;
                s = s.toLowerCase();
                let a = "";
                for(let j = 0; j<len; j++){
                    if(s[j].charCodeAt() >= 97 && s[j].charCodeAt() <=122) a+=s[j]
                }
                let lenA = a.length;
                for(let i = 0; i<Math.floor(lenA/2); i++){
                    if(a[i] !== a[lenA-i-1]) return "NO"
                }
                return answer;
            }
            
            let str="found7, time: study; Yduts; emit, 7Dnuof";
            console.log(solution(str));
        </script>
    </body>
</html>
//강사님 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){
                let answer="YES";
                s=s.toLowerCase().replace(/[^a-z]/g, '');
                if(s.split('').reverse().join('')!==s) return "NO";
                return answer;
            }
            
            let str="found7, time: study; Yduts; emit, 7Dnuof";
            console.log(solution(str));
        </script>
    </body>
</html>

'JS 알고리즘 문제풀이 > 섹션 3. 문자열 탐색' 카테고리의 다른 글

5.문자열 압축  (0) 2022.01.13
4.가장 짧은 문자거리  (0) 2022.01.13
3.숫자만 추출  (0) 2022.01.13
1.회문 문자열  (0) 2022.01.13