📖 문제

level3 가장 긴 팰린드롬

✏️ 나의 풀이

홀수일 경우와 짝수일 경우를 각각 나누어 비교했다.

홀수일 경우

function solution(s) {
    const answer1 = new Array(s.length).fill(1);

    for (let i = 1; i < s.length; i++) {
      for (let j = 1; i + j < s.length && i - j >= 0; j++) {
        if (s[i - j] === s[i + j]) answer1[i] += 2;
        else break;
      }
    }
}
  • answer1은 해당 인덱스부터 양옆의 문자를 비교했을 때 팰린드롬이 되는 문자열의 길이를 저장할 배열이다.
  • 정답이 홀수일 경우만 저장할 것이기에 모든 배열의 값을 1로 초기화해주었다.
  • 반복문을 돌리면서 i-ji+j가 같으면 answer1의 i번째 인덱스 값을 2증가시켜주었다.

짝수일 경우

function solution(s) {
    const answer2 = new Array(s.length).fill(0);

    for (let i = 0; i < s.length; i++) {
      if (s[i] !== s[i + 1]) continue;
      answer2[i] = 2;
      for (let j = 1; i + j + 1 < s.length && i - j >= 0; j++) {
        if (s[i - j] === s[i + j + 1]) answer2[i] += 2;
        else break;
      }
    }
}
  • answer2는 해당 인덱스부터 양옆의 문자를 비교했을 때 팰린드롬이 되는 문자열의 길이를 저장할 배열이다.
  • 정답이 짝수일 경우만 저장할 것이기에, 모든 배열의 값을 0으로 초기화해주었다.
  • 반복문을돌리면서 i번째 인덱스의 바로 오른쪽 i+1번째 인덱스와 값이 같을 경우 answer[i]에 2를 할당해주고, 그렇지 않을 경우 continue문이 실행되도록 했다.
  • i-ji+j+1가 같으면 answer2의 i번째 인덱스 값을 2증가시켜주었다.

반환값

function solution(s) {
    return Math.max(...answer1, ...answer2);
}
  • Math 객체의 max 메소드를 이용해 두 배열에서 가장 큰 값을 반환하도록했다.

👩‍💻 코드

function solution(s) {
    const answer1 = new Array(s.length).fill(1);
    const answer2 = new Array(s.length).fill(0);

    for (let i = 1; i < s.length; i++) {
      for (let j = 1; i + j < s.length && i - j >= 0; j++) {
        if (s[i - j] === s[i + j]) answer1[i] += 2;
        else break;
      }
    }

    for (let i = 0; i < s.length; i++) {
      if (s[i] !== s[i + 1]) continue;
      answer2[i] = 2;
      for (let j = 1; i + j + 1 < s.length && i - j >= 0; j++) {
        if (s[i - j] === s[i + j + 1]) answer2[i] += 2;
        else break;
      }
    }
    return Math.max(...answer1, ...answer2);
}

댓글남기기