알게되거나 배운부분:(int)Math.log10(number)  - 로그로 1~9 -> 0  10~99->1 구할수있음

나의풀이

class Solution {
    public int solution(String s) {
        int answer = 0; int min=s.length(); int money=s.length();
        String temp=""; int t=1;

        for(int i=1;i<=s.length()/2;i++)
        {
            for(int j=1;j*i<=s.length();j++)
            {
                if(temp.equals(s.substring((j-1)*i,j*i)))
                  {
                    t++;                          
                    if((j+1)*i>s.length())//마지막부분 예외처리
                    {
                        money-=(t-1)*i;  if(t<10){money+=1;}else if(t<100){money+=2;}else if(t<1000){money+=3;}
                        else if(t==1000){money+=4;}
                    }
                  }
                else
                {
                    money-=(t-1)*i;
                    temp=s.substring((j-1)*i,j*i);//0 2  2 4  4 6... 0 3  3 6   6 9 
                    if(t>1){if(t<10){money+=1;}else if(t<100){money+=2;}else if(t<1000){money+=3;}
                        else if(t==1000){money+=4;}
                           }
                    t=1;
                }
             }
              temp="";

                if(min>=money)
                {min=money;}
               money=s.length();
               t=1;   
        }
        answer=min;
        return answer;        
    }
}

다른사람의 풀이

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

        for(int i=1; i<=(s.length()/2)+1; i++){
            int result = getSplitedLength(s, i, 1).length();
            answer = i==1 ? result : (answer>result?result:answer);
        }

        return answer;
    }

    public String getSplitedLength(String s, int n, int repeat){
        if(s.length() < n) return s;
        String result = "";
        String preString = s.substring(0, n);
        String postString = s.substring(n, s.length());

        // 불일치 -> 현재까지 [반복횟수 + 반복문자] 조합
        if(!postString.startsWith(preString)){
            if(repeat ==1) return result += preString + getSplitedLength(postString, n, 1);
            return result += Integer.toString(repeat) + preString + getSplitedLength(postString, n, 1);
        }

        return result += getSplitedLength(postString, n, repeat+1);
    }
}

+ Recent posts