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

1.회문 문자열

crab. 2022. 1. 13. 11:33

📌강의 정리

회문문자열은 앞으로 읽으나 뒤로 읽으나 같은 문자열을 의미한다.

그러므로 처음에 투어퍼케이스나 로우케이스로 다 바꿔주면 된다.

i가0번일때 3번과 비교하고 1번일때 2번과 비교한다.

따라서 이 방법을 쓸때 전체길이의 절반만 쓰면된다.

문자열의 길이가 홀수 일때도 전체길이의 절반만 돌면된다.

먼저 예스 또는 노로 받으므로 앤서에 처음 예스를 준다.

그 이후 로우케이스로 다 소문자로 바꿔주고 길이를 구해준다.

길이변수는 len으로 이름지어준다.

홀수여도 소수라 상관은 없지만 Math.floor를 해주면 더욱 정확히 할 수 있다.

반복문내에서 이프문으로 초기값과 나중값을 비교한다. 나중값은 len-i-1로 해주면된다.

반복문을 돌며 한번이라도 다른값이 나오면 바로 노를 리턴하면된다.

또다른 방법으로는 리버스메서드를 사용하는 방법이 있다.

s.split('').reverse을 하면 문자가 하나씩 들어가고 그 배열을 거꾸로한 배열을 반환한다.

s.split('').reverse().join()

join()을 넣어주면 다시 문자열로 바꿔줄 수 있다. 이건 s를 바꿔준게 아니기 때문에 s와 비교를 하면 문자열 비교가 가능하다.

📌느낀점

문제는 나도 풀었지만 강사님은 나보다 반복을 절반만 돌면된다.

또한 강사님의 코드가 문제의 정의에 더욱 적합하다.

모든면에서 부족함이 느껴진다.

처음 생각할때부터 적게 반복하고 문제의 정의를 코드에 녹일줄 알아야한다.

//나의 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){
                let answer="YES";
                let a = '';
                s = s.toLowerCase();
                for(let i=0;i<s.length;i++){
                    a+=s[s.length-i-1]
                }
                if(a !== s) answer = "NO"; 
                return answer;
            }
            
            let str="goooG";
            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();
                let len=s.length;
                for(let i=0; i<Math.floor(len/2); i++){
                    if(s[i]!=s[len-i-1]) return "NO";
                }
                return answer;
            }
            
            let str="goooG";
            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();
                if(s.split('').reverse().join('')!=s) return "NO";    
                return answer;
            }
            
            let str="gooG";
            console.log(solution(str));
        </script>
    </body>
</html>

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

5.문자열 압축  (0) 2022.01.13
4.가장 짧은 문자거리  (0) 2022.01.13
3.숫자만 추출  (0) 2022.01.13
2.유효한 팰린드롬  (0) 2022.01.13