[프로그래머스] 코딩테스트 연습 - 연습문제 Level 3 가장 긴 팰린드롬

uoahy·2021년 9월 30일
0

Solution.java

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

        for (int i = 0; i < s.length(); i++) {
            int left = i, right = s.length() - 1;
            int j = s.length();
            while (left <= right) {
                if (s.charAt(left) != s.charAt(right)) {
                    left = i;
                    j = right;
                }
                else {
                    left++;
                }
                right--;
            }
            
            if (j - i > answer) answer = j - i;
        }

        return answer;
    }
}

문자열의 길이가 최대 2500이어서 n^2으로 풀었다.

효율성은 다 통과했는데 정확성에서 3개가 틀렸다고 떴다.

원인을 모르겠다. 다음에 다시 도전해봐야겠다.


예외상황이 있었다. 근데 예외상황을 해결하자니 시간초과가 뜬다.

문자열 알고리즘을 공부한 후 다시 풀어봐야겠다.


Solution.java (수정)

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

        for (int i = 0; s.length() - i > answer; i++) {
            for (int j = s.length(); j - i > answer; j--) {
                int left = i, right = j - 1;
                boolean b = true;
                while (left <= right) {
                    if (s.charAt(left) != s.charAt(right)) {
                        b = false;
                        break;
                    }
                    
                    left++;
                    right--;
                }
            
                if (b) answer = j - i;
            }
        }

        return answer;
    }
}

for문의 종료조건을 수정하여 해결하였다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

0개의 댓글