Jam's story
[프로그래머스] 문자열 압축 본문
- count 변수는 똑같은문자열의 갯수를 세는 변수인데, 문자열을 자르는 동시에 하나가 생기므로 1로 지정
- 첫번째 for문은 문자열을 몇개의 문자로 자를건지 ,1개부터 시작
- 문자열을 자르는 것은 문자열의 반을 넘을 수 없으니 끝값은 s.length()/2
- pre 변수에 substring으로 i만큼 자른 문자열을 저장해줌
- 두번째 for문은( 연속으로 같아야하니까 )그 다음 비교할 문자열 블럭을 만들기 위함
- 그래서 i부터 시작을 했고, 문자열 길이 끝까지 탐색
- endIdx는 배열의 인덱스를 넘지않기위해 만든것, ((c+3)이면 넘어가니,, )
- j인덱스부터 시작해서 i개만큼 더한 인덱스랑, (substring 두번째 인자에 들어갈꺼니까 -1이되므로)
- s.length()비교해서 j+i이 더크면 문자열 길이가 들어가도록
- substring에서 인덱스를 넘지않기위해
- 전에꺼랑 다음 꺼를 비교해서 같다면 count를 올림
- 같지않다면 , 2 이상인 경우는 앞에 숫자를 붙여주어야하니
- result에 String형으로 변환하여 count 값을 넣어주는 것을 추가하고
- result에 pre값을 넣어준다.
- 이제 연속이 안되니까 next가 pre가 되고 count 초기화
- 마지막 인덱스일때 한번 더 더해야하므로 넣어주고
- 마지막 문자를 붙인다.
- answer에는 결과길이와 answer중에 뭐가 더 작은지 비교하고 반환
class Solution {
public int solution(String s) {
int answer = s.length();
int count = 1;
for(int i=1; i<=s.length()/2; i++){//[abc][abc][abd][ca] ->2abc.abd.ca
String result="";
String pre= s.substring(0, i);
for(int j=i; j<=s.length(); j+=i){
int endIdx = Math.min(j + i, s.length());
String next = s.substring(j, endIdx);
if(pre.equals(next)){ //[abc][abc] / [abc][abd] / [abd][ca]
count++; // 2 / x (2) / x (1)
} else {
if(count >= 2){
result+=String.valueOf(count); //2
}//if
result+=pre; //2abc
pre=next;
count = 1;
}//else
}//for-j
result+=pre;
answer = Math.min(answer, result.length());
}//for-i
return answer;
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 더맵게 (0) | 2022.07.18 |
---|---|
[프로그래머스] 오픈채팅방 (0) | 2022.07.14 |
[프로그래머스] 문자열 내 p와 y의 개수 (0) | 2022.07.12 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2022.07.11 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.07.08 |
Comments