반응형
https://school.programmers.co.kr/learn/courses/30/lessons/60057
최초코드
import java.util.*;
class Solution {
public int solution(String s) {
StringBuffer sb = new StringBuffer();
int answer = 1000;
if(s.length()==1) return 1;
int count = s.length() / 2;
for(int len=1; len <= count; len++) {
int i=0;
String prev = "";
int sameCount = 0;
while(i<s.length()) {
int start = (i)*len;
int end = (i+1)*len <= s.length() ? (i+1)*len : s.length();
String str = s.substring(start, end);
// System.out.println(str);
if(prev.equals(str)) { // 앞이랑 같다
sameCount++;
if(end == s.length() && sameCount > 1) sb.append(Integer.toString(sameCount)); // 마지막이다
}
else { // 앞이랑 다르다
if(sameCount > 1) sb.append(Integer.toString(sameCount));
sb.append(prev);
sameCount = 1;
}
prev = str;
if(s.length() <= (i+1)*len) { // 마지막 꼬랑지 붙이기
sb.append(str);
break;
}
i++;
}
answer = Math.min(answer, sb.length());
// System.out.println(sb);
sb.setLength(0);
}
return answer;
}
}
테스트케이스5는 전체 길이가 1인 문자열. ㅎㄷㄷ한 예외..
정리
import java.util.*;
class Solution {
public int solution(String s) {
StringBuffer sb = new StringBuffer();
int answer = Integer.MAX_VALUE;
if(s.length() == 1) return 1; // 예외처리
int count = s.length() / 2;
for(int len=1; len <= count; len++) {
int i=0;
String prev = "";
int sameCount = 0;
while(i < s.length()) {
int start = (i)*len;
int end = Math.min((i+1)*len, s.length());
String str = s.substring(start, end);
if(prev.equals(str)) { // 앞과 동일
sameCount++;
}
else { // 앞과 다름
if(sameCount > 1) sb.append(Integer.toString(sameCount));
sb.append(prev);
sameCount = 1;
}
if(end == s.length()) { // 마지막 꼬랑지 붙이기
if(sameCount > 1) sb.append(Integer.toString(sameCount));
sb.append(str);
break;
}
prev = str;
i++;
}
answer = Math.min(answer, sb.length());
// System.out.println(sb);
sb.setLength(0);
}
return answer;
}
}
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 정수삼각형 (0) | 2023.01.01 |
---|---|
Word Break (0) | 2022.09.04 |
[정렬] 오픈채팅방 (0) | 2022.08.07 |
[Heap] 디스크 컨트롤러 (0) | 2022.08.07 |
[이진수] Binary Gap (0) | 2019.04.11 |