알게되거나 배운부분:(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);
}
}
'코딩(알고리즘)' 카테고리의 다른 글
[LEVEL1]문자열 내 마음대로 정렬하기 (0) | 2022.04.07 |
---|---|
[LEVEL1]문자열 내림차순으로 배치하기 (0) | 2022.04.05 |
[LEVEL1] 정수 내림차순으로 배치하기 (0) | 2022.03.30 |
[LEVEL1] 정수 내림차순으로 배치하기 (0) | 2022.03.30 |
[LEVEL1] 최대공약수와 최소공배수 (0) | 2022.03.28 |