본문 바로가기
Algorithm/백준풀이

[알고리즘 문제풀이] 백준 1701 Cubeditor (JAVA코드)

by 계범 2022. 1. 15.

목차

    https://www.acmicpc.net/problem/1701

     

    1701번: Cubeditor

    Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고생한

    www.acmicpc.net

    관련 개념 : KMP

    2022.01.12 - [Algorithm/개념] - [알고리즘 개념] KMP - 문자열 검색 알고리즘(JAVA 코드)

     

     

    /**
     * 
     * 문자열 문제
     * 
     * 1. kmp 알고리즘 중 부분 문자열 내부에 패턴 파악 코드 사용
     * 
     * 2. 패턴 경계 길이 중 가장 긴 것 출력
     * 
     * 3. 하지만 기존 코드로는 앞에서부터만 체크하니, 전체 문자열 돌면서 서브스트링 만들기
     * 
     * 전체문자열 for문 O(n)
     * 패턴 구하기 for문 O(n)
     * 
     * n^2 풀이
     * 
     */
    import java.util.*;
    import java.io.*;
    
    public class BJ1701_Cubeditor {
        
        public static String str;
        public static int[] pi;
        public static int max;
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            //문자열
            str = br.readLine();
            for(int i = 0; i < str.length(); i++){
                String subStr = str.substring(i, str.length());
                getPi(subStr);
            }
    
            System.out.println(max);
        }
    
        public static void getPi(String subStr){
            pi = new int[subStr.length()];
    
            int j = 0;
            for(int i = 1; i < subStr.length(); i++){
                while(j > 0 && subStr.charAt(i) != subStr.charAt(j)){
                    j = pi[j-1];
                }
    
                if(subStr.charAt(i) == subStr.charAt(j)){
                    pi[i] = ++j;
                    max = Math.max(max,pi[i]);
                }
            }
        }
    }

     

     

     

     

    댓글