코딩테스트 문제풀이

[JavaScript/프로그래머스] 가장 긴 팰린드롬

lado 2021. 9. 13. 22:52

이번 주 스터디 주제가 문자열이었기 때문에

회문 문제 하나는 풀어봐야지 하는 마음으로 도전했는데 실패했다.

나는 그냥 index가 1인 요소부터 양쪽에 있는 문자가 같으면

점점 범위를 넓혀서 양쪽의 문자가 같은지 확인하고

반복문을 돌 때마다 현재 팰린드롬 길이를 저장하는데

이전에 저장된 길이보다 큰 경우에만 갱신해서

모든 반복문이 끝나면 가장 긴 팰린드롬 길이만 반환될 수 있게 구현했다.

 

하지만 특정 테스트케이스가 자꾸 오류가 나서 질문하기를 봤더니

내 코드에는 "aa"와 같이 연달아 반복되는 짝수 문자열을 커버하지 못하는 문제가 있었다.

그러고 보니까 이 코드의 문제 풀이 방식은 접근 방식부터 아주 틀렸다는 것을 깨달았다.

그래서 적지 않는 것으로 하고...

 

다른 블로그에서 정상적으로 잘 돌아가는 코드를 찾았는데

자바로 구현된 코드라 자바스크립트로 바꿔보았다.

굉장히 깔끔하게 잘 구현하신 것 같다.

하지만 바로 이해는 안돼서 어제 하나 하나 수기로 반복문 돌리면서 복습해봤다.

팰린드롬 문제 풀 때는 가장 큰 경우의 수부터 점점 좁혀나가는 게 합리적이라는 것을 배웠다.

 

function solution(s) {
    for (let leng = s.length; leng > 1; leng--) {
        for (let start = 0; start + leng <= s.length; start++) {
            let check = true;

            for (let i = 0; i < leng / 2; i++) {
                if (s[start + i] !== s[start + leng - i - 1]) {
                    check = false;
                    break;
                }
            }

            if (check) return leng;
        }
    }

    return 1;
}