[프로그래머스] 레벨3 (level3)가장긴팰린드롬
2020년 06월 20일, 21:15
가장 긴 팰린드롬
문제설명
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 abcdcba이면 7을 return하고 abacde이면 3을 return합니다.
제한사항
- 문자열 s의 길이 : 2,500 이하의 자연수
- 문자열 s는 알파벳 소문자로만 구성
입출력 예
s answer abcdcba 7 abacde 3 입출력 예 설명
입출력 예 #1
4번째자리 'd'를 기준으로 문자열 s 전체가 팰린드롬이 되므로 7을 return합니다.입출력 예 #2
2번째자리 'b'를 기준으로 aba가 팰린드롬이 되므로 3을 return합니다.
문제풀이
- 전체 길이부터 조사.(가장 긴 팰린드롬을 찾으니까 전체 부터 내려오는게 좋음.)
- 연속되는 길이를 조사하기 위한 check를 선언.
- i+j만큼 돌림.(i+j를 하는 이유는 abcdef의 경우, 6가지는 한가지경우, 5가지는 abcde,bcdef를 보기 위해서다.)
- k는 당연히 i/2여서 반을 조사해야한다.
- 그래서 연속되는 값이 아니라면 check를 false로 바꾸고 break를 걸어서 계속 진행할 수 있게한다.
- 연속되는 값이라면 i를 반환하면 된다.(가장 긴 길이부터 조사했으므로, 바로 반환 가능)
function solution(s) {
var answer = 1;
for (let i = s.length; i > 1; i--) {
for (let j = 0; i + j <= s.length; j++) {
let check = true;
for (let k = 0; k < i / 2; k++) {
if (s[j + k] !== s[i + j - k - 1]) {
check = false;
break;
}
}
if (check) return i;
}
}
return answer;
}
아쉬운 점 || 느낀 점
효율성을 통과하지 못해서 진짜 엄청 여러번 시도를 했고,
시도를 해도 효율성 1번은 풀지못했다.
그래서 구글링을 했고, i+j에 대한 힌트를 얻었다.
i+j를 채택해서 푸니까, 복잡도가 많이 줄었고, 통과를 했다.
레벨3부터는 몇몇 문제 빼고는 항상 힌트를 찾아서 풀었는데, 아직 진짜 멀었다..