[프로그래머스] 가장 긴 펠린드롬 (java) String

2020-03-06

가장 긴 펠린드롬 (프로그래머스 > String)

문제 링크

문제설명

앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(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합니다.


풀이

package String;

//40min
public class prog_3_가장긴펠린드롬 {

    static public int solution(String s){
        int answer = 0;

        if(s.length() == 1)
        	return 1;

        if(s.length() == 0)
        	return 0;

        //홀수라고 가정
        for(int i=1; i<s.length()-1; i++) {
        	int len = 0;
        	int front = i-1;
        	int back = i+1;
            int ck=0;
        	
        	while(true) {
	        	if(front >=0 && back<s.length()) { //조건 걸어주고
	        		if(s.charAt(front) == s.charAt(back)) {
	        			if(ck==0) {
	        				len = 1;
	        				ck++;
	        			}
	        			len = len+2;
	        			front--; back++;
	        		}
	        		else
	        			break;
	        	}
	        	else 
	        		break;
        	}//while
        	
        	answer = Math.max(answer,len);
        }
        
        //짝수라고 가정
        for(int i=1; i<s.length(); i++) {
        	int len = 0;
        	int front = i-1;
        	int back = i;
        	
        	while(true) {
	        	if(front >=0 && back<s.length()) { //조건 걸어주고
	        		if(s.charAt(front) == s.charAt(back)) {
	        			len = len+2;
	        			front--; back++;
	        		}
	        		else
	        			break;
	        	}
	        	else 
	        		break;
        	}//while
        	
        	answer = Math.max(answer,len);
        }
        
        return answer;
    }
	
	
	public static void main(String[] args) {
		System.out.println(solution("bbbbaaaaabbbb"));
	}
}

후기 (40min)

처음에는 aba aabaa 같은 홀수의 경우만 생각해서 풀어서 절반만 맞았다.. 이후에 aa나 abba 같은 짝수의 개수를 푸는 법을 생각해내서 풀었고 조금 더럽게 푼거같…다..