[JavaScript][Programmers] 가장 긴 팰린드롬

조준형·2021년 8월 18일
0

Algorithm

목록 보기
77/142
post-thumbnail

🔎 가장 긴 팰린드롬

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/12904

📄 제출 코드

function solution(s) {
    let len = s.length;
    for (let i = len; i > 0; i--) {
        for (let j = 0; j <= len-i; j++) {
            // console.log(s.slice(j, j+i))
            let chk = checkPalin(s.slice(j,i+j));
            if (chk) return i;
        }
    }
    return 1;
}
function checkPalin(str) {
    const mid = Math.floor(str.length / 2);
    for (let i = 0; i < mid; i++) {
        if (str[i] !== str[str.length - 1 - i]) return false;
    } return true;
}
let s = "abacba";
console.log(solution(s));

앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬이라고 한다.
처음에 간단히 풀리겠다고 생각했는데 결국 못풀어서 다른사람의 코드를 참고했다.

문자열 s를 한글자씩 줄여가면서 가운데를 기준으로 앞이랑 뒤를 비교하며 한번이라도 다르면 팰린드롬이 아니라 false를, 모두 같다면 true를 리턴하고 그때 i를 리턴한다.
전체 문자열에서 하나씩 줄여가는 거라 팰린드롬을 처음 발견한 순간이 가장 긴 문자열이다.
풀 수 있을 거같았는데 못풀어서 내일 다시 풀어봐야겠다.

abacba의 경우

abacba // a,c가 달라 false
// 1개지운경우 좌에서 1개 우에서 1개씩 지운경우
abacb // 처음이 달라 false
bacba // 처음이 달라 false

// 2개지우는 경우 좌에서 2, 우에서2, 좌우 1개씩
abac // 처음이 달라 false
bacb // a,c가 달라 false
acba // c,b가 달라 false

// 3개지우는 경우
aba // true

📘 참고

https://taesung1993.tistory.com/71

profile
깃허브 : github.com/JuneHyung

0개의 댓글