Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

끄적끄적

프로그래머스 가장 긴 팰린드롬 본문

알고리즘

프로그래머스 가장 긴 팰린드롬

yenacathy97 2021. 10. 10. 14:13

너무 복잡하게 생각해서 계속 시간 초과가 났다..

함수를 새로 만들지 않고 그냥 for문으로 체크해주니 통과했다 ㅜ

효율성 1번에서만 시간초과가 발생한다면 현재 탐색할 길이가 그때까지 찾은 최대 길이보다 작으면 탐색하지 않는 방안을 생각해보자

import java.util.*;
class Solution
{
    public int solution(String s)
    {   int maxLen = 1; //최대 길이는 항상 1
        
        for(int i=0;i<s.length();i++){ //살펴볼 시작 위치
            for(int j=s.length()-1;j>=i;j--){ //살펴볼 마지막 위치
                int start = i; //start에 시작 위치저장
                int last=j; //last에 마지막 위치 저장
                boolean check=true; //팰린드롬이 가능한지 체크할 boolean변수
                for(int k=0;k<j;k++){ //하나씩 이동하면서 같은지 본다
                    if(maxLen>last-start+1) break; // 살펴볼 길이가 최대 길이보다 작아지면 살펴볼 필요 없음
                    if(start+k>= last-k) break; // 시작 위치가 끝 위치보다 커지면 탈출
                    if(s.charAt(start+k) != s.charAt(last-k)){ // 같지않은 문자 찾으면
                        check=false;//false로 바꾸고 탈출
                        break;
                    }
                }
                if(check){ //펠린드롬 가능하면
                    maxLen = Math.max(maxLen,last-start+1); //최대 길이 갱신
                }
                
            }
                
                
            }
        
        
        
        return maxLen;
    }
}

'알고리즘' 카테고리의 다른 글

내가 보려고 적는 순열, 조합, 부분 집합  (0) 2021.09.27
SWE 암호생성기  (0) 2021.08.06
백준 2493 탑  (0) 2021.08.06
백준 17478 재귀함수가 뭔가요?  (0) 2021.08.06
백준 1244 스위치 켜고끄기  (0) 2021.08.06
Comments