1. 문제
https://programmers.co.kr/learn/courses/30/lessons/60057?language=java
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자
programmers.co.kr
2. 나의 풀이
import java.util.*;
class Solution {
public int solution(String s) {
int answer = s.length();
StringBuilder sb1 = new StringBuilder(s);
StringBuilder sb2 = new StringBuilder("");
//System.out.println("sb2 : " + sb2);
for(int i = 1; i <= s.length()/2; i = i + 1) {
String imsi = "";
int su = 0;
while(true) {
if(imsi.equals(sb1.substring(0, i))) {
su++;
sb1.delete(0, i);
}else if(!imsi.equals(sb1.substring(0, i))){
if(su == 0) {
imsi = sb1.substring(0, i);
su++;
sb1.delete(0, i);
}else if(su == 1) {
sb2.append(imsi);
su = 0;
}else if(su > 1) {
sb2.append(su + imsi);
su = 0;
}
}
if(sb1.length() - i < 0) {
if(su == 1) {
sb2.append(imsi);
su = 0;
}else {
sb2.append(su + imsi);
su = 0;
}
sb2.append(sb1);
sb1.delete(0, sb1.length());
break;
}
if(sb1.length() == 0) {
if(su == 1) {
sb2.append(imsi);
su = 0;
}else {
sb2.append(su + imsi);
su = 0;
}
break;
}
//System.out.println("sb1 : " + sb1 + ", sb2 : " + sb2);
}
//System.out.println("TheEnd sb1 : " + sb1 + ", sb2 : " + sb2);
if(sb2.length() < answer) {
answer = sb2.length();
//System.out.println("answer : " + answer);
}
sb1.append(s);
sb2.delete(0, sb2.length());
}
return answer;
}
}
3. 다른 사람 풀이
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);
}
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
(Java)프로그래머스 코딩테스트 연습 - 2020 KAKAO BLIND RECRUITMENT - 괄호 변환 (0) | 2020.11.16 |
---|---|
(Java)프로그래머스 코딩테스트 연습 - Summer/Winter Coding(2019) - 멀쩡한 사각형 (0) | 2020.11.15 |
(Java)프로그래머스 코딩테스트 연습 - 스택/큐 - 프린터 (0) | 2020.11.13 |
(Java)프로그래머스 코딩테스트 연습 - 스택/큐 - 다리를 지나는 트럭 (0) | 2020.11.12 |
(Java)프로그래머스 코딩테스트 연습 - 2019 KAKAO BLIND RECRUITMENT - 실패율 (0) | 2020.11.10 |