[algorithm] 회문 문자열

Ho-eng·2023년 4월 19일
0

❓ 회문 문자열


앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.

  • 입력설명

    첫 줄에 정수 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
  • 출력설명

    첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
  • 입력예제 1

    gooG
  • 출력예제 1

    YES

❗ 문제 풀이

내 풀이

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

<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(str) {
        let answer = "yes"
        let reverseStr = str.toLowerCase().split("").reverse().join("")

        if (str !== reverseStr) answer = "no"

        return answer
      }
      let str = "goog"
      console.log(solution(str))
    </script>
  </body>
</html>

  • 컨셉
    회문 : 앞으로 읽으나 뒤로읽으나 동일한 문자열.
    예를들자면 Hi는 회문이 아니나, HiiH는 회문!
    그럼 이걸 전체길이의 2로나눠서 반복문을 돌리거나
    문자열을 거꾸로 해서 원본이랑 같은지를 비교하거나 하면 될것 같다.

  • 코드리뷰
    a. 위의 컨셉중 문자열을 거꾸로 해서 원본이랑 같은지를 비교했다.
    b. answer에 기본값으로 yes를 주고(빈값으로 하면 if문을 한번 더 써야되니까..!) 파라미터로 받은 문자열(str)을 소문자로 바꿔주고, split으로 배열로 바꾼 후, reverse로 반전시켜주고 join으로 다시 문자열로 합쳐줬다.
    이 귀찮은 방식을 한 이유는 오직 reverse() <- 반전을 시켜주는 메서드가 '배열' 에서만 되기 때문이다..

    c. 그러고나서, 원본문자열과 반전시킨 문자열을 비교 하고, 거짓이면 answer에 no라는 문자열을 할당한다.
    위에도 적었지만, 기본값으로 yes를 주었기 때문에, 참이면 yes를 할당하라는 코드를 안쓸 수 있었다.



정답 소스

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){  
                let n=arr.length;
                let answer=Array.from({length:n}, ()=>1);
                for(let i=0; i<n; i++){
                    for(let j=0; j<n; j++){
                        if(arr[j]>arr[i]) answer[i]++;
                    }
                }             
                return answer;
            }

            let arr=[87, 89, 92, 100, 76];
            console.log(solution(arr));
        </script>
    </body>
</html>
profile
매일 '어제의 나와 오늘의 나는 무엇이 다를까?'를 고민하는 김호엥입니다.

0개의 댓글