출처
코드
1. 먼저 압축할 글자수를 정하는 것은 전체 길이의 절반까지만 같은지 확인하면 됩니다.
2. while문을 이용해서 더이상 글자를 자를 수 없을때까지 돌아줍니다. 만약 자를 글자가 없다면 현재의 글자와 cur에 들어간 글자를 넣어주고 break로 탈출합니다.
3. 만약 다음 글자가 cur과 같다면 압축cnt를 +1 해주고, 다음 글자가 cur과 다르다면 이전까지의 압축수와 글자를 정답에 넣고 cur을 바꾸어줍니다.
4. 압축된 글자 길이가 기존 길이보다 짧다면 answer에 넣어줍니다.
class Solution {
public int solution(String s) {
int answer = s.length();
if(s.length() == 1){
return 1;
}
// 전체 길이가 / 2 만큼만 같은지 비교 가능
for(int i = 1; i<s.length() / 2 + 1; i++){
String tmpAnswer = "";
String cur = s.substring(0,i);//현재 잘린 글자
String sub_s = s.substring(i,s.length());//남은 글자
int cnt = 1;//몆번 똑같은 글자 나오는 지
//자를 글자 더 없을때 끝남
while(true){
//자를 글자가 없다면 기존거 그냥 추가
if(sub_s.length()<i){
tmpAnswer += (cnt == 1) ? cur + sub_s : String.valueOf(cnt) + cur + sub_s;
break;
}
//다음 글자가 cur과 같다면 압축
if(sub_s.substring(0,i).equals(cur)){
cnt++;
}
//다음 글자가 cur과 다르다면
else{
//cur 바꾸고 이전까지의 압축 수와 글자를 정답에 넣기
tmpAnswer += (cnt == 1) ? cur : String.valueOf(cnt) + cur;
cur = sub_s.substring(0,i);
cnt = 1;
}
sub_s = sub_s.substring(i,sub_s.length());
}
//압축된 글자 길이가 기존 길이보다 짧다면 answer에 넣기
answer = Math.min(tmpAnswer.length(), answer);
}
return answer;
}
}'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] SQL - String,Data (MySQL) (0) | 2022.05.13 |
|---|---|
| [프로그래머스] SQL - 없어진 기록 찾기 (0) | 2022.04.29 |
| [프로그래머스] 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 (0) | 2022.04.14 |
| [프로그래머스] 전화번호 목록 (0) | 2021.11.23 |
| [프로그래머스] 위장 (0) | 2021.11.22 |