► JS Algorithm/Basic

JavaScript 알고리즘 | 25_ 회문 찾기

다람트리 2022. 9. 28. 14:45
반응형

🔒 Q

입력받은 문자열이 회문인지 아닌지 판별하세요.

(팰린드롬 palindrome = 회문 : 앞에서부터 읽으나 뒤에서부터 읽으나 같은 말이 되는 어구)

 조건:

  1)알파벳 이외의 문자는 취급하지 않습니다.

  2)대소문자는 구분하지 않습니다.

🔒 ex

입력값 DA2r(ko3ra)nge, ligH*tgreen, ne#ergth#Gil, Eg@naro5krad
출력값 회문입니다

 

🔒 Solution

▼나의풀이

      function solution(nouns) {
        let answer = "";
        let arr = nouns;
        let onlyString = []; // 문자만 묶음
        var reg = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/g; // 모든 특수문자 찾기
        var nums = /[1-9]/g; // 모든 숫자 찾기
        arr.map(
          (v, i, a) =>
            (onlyString += v.replace(reg, "").replace(nums, "").toLowerCase())
        ); //숫자,특수문자제거 및 소문자로 모두 변경
        let origin = [...onlyString].join("");
        let reversed = [...onlyString].reverse().join("");

        origin === reversed
          ? (answer = "회문입니다")
          : (answer = "회문이 아닙니다.");
        return answer;
      }

      console.log(solution(["DA2r(ko3ra)nge", "ligH*tgreen", "ne#ergth#Gil", "Eg@naro5krad", ])
      );

 

🟢 풀이법: 모든 문자에서 특수문자와 숫자만 제거하고, 남은 알파벳은 모두 소문자로 바꿔서 나열한다.

   그리고 정방향과 역방향의 배열을 비교하여 동일한지 구분한다.

🟢 에러사항: 순방향, 역방향 모두 같은데도 불구하고, '회문이 아닙니다' 라고 나와서 멘붕..

  이유는, 변수의 타입(원시형, 참조형) 때문이였다. 쉽게말해, 같은 배열끼리는 다른거고, 같은 스트링끼리는 같은거다.

  아래의 이미지를 참고하자.

 

   🟡 문제해결 전 err) 참조 자료형 (Reference data type) = 참조타입

문제해결전_err) 참조형

참조타입은 원시타입이 아닌 모든 것이 참조 자료형이다.

즉, 배열([ ]), 객체({ }), 함수(function(){})

참조타입은 동적인 데이터를 보관하기위해 다른곳에 저장하고 변수에는 주소를 할당한다.

 

   🟡 문제해결 후) 원시 자료형 (Primitive data type) = 원시타입

문제해결후) 원시형

원시타입은 '하나'의 데이터정보를 담고 있다.

6가지: number(2.25987), string('sun'), boolean(true, false), undefined, null, symbol

반응형