Lv.3 - 가장 긴 팰린드롬

·2022년 9월 17일
0

프로그래머스

목록 보기
15/18
post-thumbnail

예시 : abbcb를 점검할 때.
abcbb를 검사한다 -> abcb, bcbb를 검사한다 -> abb, bbc, bcb를 검사한다.
반복한다.

step 1: 검사할 길이 len 을 정의한다.
step 2: len 만큼 잘라낸 문자열들을 검사한다.

function solution(s) {
  const check = (s) => {
    for (let i = 0; i < Math.floor(s.length / 2); i++) {
      if (s[i] !== s[s.length - 1 - i]) return false;
    }
    return true;
  };
    
  let len = s.length;
  if (check(s)) return len;

  while (--len > 2) {
    for (let i = 0; i <= s.length - len; i++) {
      const str = s.substring(i, len + i);
      if (check(str)) return len;
    }
  }
  return 1;
}

팰린드롬인지 판단하는 함수 check는 아래와 같이 작성하면 더 간결하다.

const check = s => s === s.split("").reverse().join("");

다만 문자열이 길어질수록 시간도 길어지는 검사법이라 다르게 작성했다.

가장 긴 길이부터 시작해서 일일이 검사하는 방법 외에는 묘수가 안 보였다.
더 좋은 방법도 있지 않을까?

profile
모르는 것 투성이

0개의 댓글