[프로그래머스 Lv3] 12904 : 가장 긴 팰린드롬

수민이슈·2023년 10월 20일
0

[C++] 코딩테스트

목록 보기
101/116
post-thumbnail

🖊️ 문제

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


🖊️ 풀이


이분탐색이군

근데 다만, 처음에는 substr을 쓴 다음에, 각 문자열에 대해서 이분탐색을 진행했고, 시간초과가 났다.

그래서 생각해봤는데,
이분탐색에서 시작값을 중간값으로 두고, left, right 두 개를 옆으로 옮겨주면 될 것 같았다.

그래서 시작점에서부터 검사 함수를 하나씩 돌려주고,

펠린드롬이 짝수인 경우를 대비해준다.
홀수인 경우,
left = right이면 되지만,
짝수인경우,
left , right여야 한다 (left, right가 다를 수 있음)

그래서 돌리면 된답.

#include <iostream>
#include <string>
using namespace std;

int isPalindrome(string& s, int left, int right)
{
    while(left >= 0 && right < s.length()) {
        if (s[left] != s[right]) break;
        left--;
        right++;
    }
    return right - left - 1;
}

int solution(string s)
{
    int answer=0;
    
    for (int i = 0 ; i < s.length() ; i++) {
        answer = max(answer, isPalindrome(s, i, i));
      	answer = max(answer, isPalindrome(s, i-1, i));
	}

    return answer;
}

0개의 댓글