이번 주 스터디 주제가 문자열이었기 때문에
회문 문제 하나는 풀어봐야지 하는 마음으로 도전했는데 실패했다.
나는 그냥 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;
}
'코딩테스트 문제풀이' 카테고리의 다른 글
[JavaScript/프로그래머스] 신규 아이디 추천 (2) | 2021.09.13 |
---|---|
[JavaScript/프로그래머스] 문자열 압축 (0) | 2021.09.12 |