회문 문자열

아기코딩단2·2022년 8월 9일
0

알고리즘

목록 보기
9/10

회문 문자열
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력
하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
▣ 입력설명
첫 줄에 정수 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
▣ 출력설명
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
▣ 입력예제 1
gooG
▣ 출력예제 1
YES

<!--my solution-->
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과 - 섹션3-1 - 회문 문자열</title>
    </head>
    <body>
        <script>
            function solution(str) {
            //대소문자 구분없이 거꾸로 읽었을 때 똑바로 읽었을 때 같은 문자열을 회문 문자열이라고 한다.
            let answer = str; 
            let arr = Array.from(answer);    
            let n = arr.length;
            let arr1 = [...arr]; // 디스트럭쳐링 할당
            console.log("arr:::", arr);
            arr1.reverse(); // 원본 배열 변경 
            for (let i = 0; i < n; i++) {
                if(arr[i].toUpperCase() === arr1[i].toUpperCase()) {
                    return 'YES';
                } else {
                    return "NO";
                    }
                }
            }


            const str = "Gog";
            console.log(solution(str));
        </script>
    </body>
</html>

잘나온다ㅇㅇ

깨달은 점은 reverse()메서드는 원본 배열을 변경시킨다는 점이다.

<!--teacher's solution-->
<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>

코드 비교 : 첫번째는 나와 완전 다른 방식으로 풀었고, 두번쨰의 경우 reverse 메서드 뒤에 join을 붙여 뭔가 다르게 동작하게 한 점이다. 내가 아는 join 메서드의 역할은 배열에서 뭔가를 제거할 때 사용하는 것으로 알고 있다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/join

join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다. 이때가지 join.(' '); 만 써서 제거하는 건줄 알았는데 아니었다.

문자열로 변경시키는 함수였는데 나는 구조분해 할당을 사용해서 풀었다.

profile
레거시 학살자

0개의 댓글