3-1) 회문 문자열

김예지·2021년 8월 26일
0

3장은 문자열 탐색에 관련된 문제들이다.

문제

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

입력예제 1

gooG

출력예제 1

YES


문제 풀이

예습 이론

  • 회문 문자열(팰린드롬): 앞에서, 뒤에서 읽을 때 같은 문자열을 뜻한다.
  • Math.floor(x): x를 반내림한다.(소수점 삭제, 몫만 리턴함)
  • s.split(''): ''로 쪼개서 배열로 만든다
  • reverse(): 배열을 뒤집는다.
  • join(''): ''을 사이사이에 넣어서 합친다. ex) join('-'): g-o-o-g

코드1

방법1은 직접비교하는 방법이다.
(1) 소문자나 대문자로 문자열을 통일한 후,
(2) 비교한다. 이때, Math.floor(len/2)를 통해 반복횟수를 정한다. 만약 일치하지 않는 것이 있다면 "NO"를 리턴하고 함수를 종료한다.(사진 참고)
(3) 일치한다면 for문을 빠져나와서 "YES"를 리턴한다.

<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"; //일치하지 않는 것이 있으면, "NO"리턴 후, 프로그램 종료
                } 
                return answer; //"YES" 리턴
            }
            
            let str="goooG";
            console.log(solution(str));
        </script>
    </body>
</html>

코드2

방법2는 reverse() 메소드를 사용한다.
(1) 소문자(대문자)로 문자열을 통일하고
(2) reverse()를 통해 문자열을 뒤집고, 원본과 같은지 비교한다. 다르다면 "NO"를 리턴한다.
(3) 같다면 if문을 빠져나와 answer="YES"를 그대로 리턴한다.

<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"; //빈문자열로 split 하면 문자 하나씩 배열의 원소가 됨. reverse()는 배열에서 사용 가능
                return answer;
            }
            
            let str="goooG";
            console.log(solution(str));
        </script>
    </body>
</html>
profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

2개의 댓글

comment-user-thumbnail
2021년 9월 10일

9/10
1. 일치하지 않는 것이 있다면, return "NO"를해서 남은 반복문 실행하지 않고 프로그램 종료한다.

답글 달기
comment-user-thumbnail
2021년 9월 11일

9/11

답글 달기