반응형
https://programmers.co.kr/learn/courses/30/lessons/60057
레벨 2인데 생각보다 어려웠다.
문제 자체가 잘 이해가 안가더라.
aabbaccc 예제를 2a2ba2cc이지 왜 2a2ba3c냐고 속으로 엄청 화냈음ㅋㅋㅋ
근데 자세히 보니까 스플릿 기준 1이어서 2a2ba3c가 되는거더라
그리고 앞에 앞에 숫자를 넣는것보다 뒤에 숫자를 넣는게 += 할 때 더 좋을것이라 판단했다.
package question;
import java.util.HashMap;
import java.util.Iterator;
public class 카카오_문자열_압축
{
// aabbcaabb
public static void main(String [] args)
{
HashMap<String, Integer> testData = new HashMap<>();
// 2a2bac2c
// ac2c
testData.put("aabbaccc", 7);
testData.put("ababcdcdababcdcd", 9);
testData.put("abcabcdede", 8);
testData.put("abcabcabcabcdededededede", 14);
testData.put("xababcdcdababcdcd", 17);
Iterator iterator = testData.keySet().iterator();
while (iterator.hasNext())
{
String key = (String)iterator.next();
System.out.println(key + ":" + ((solution(key) == testData.get(key)) ? "성공" : "실패") );
}
}
static int solution(String s)
{
if (s.length() == 1)
return 1;
int resultCount = 1000;
for (int i = 1; i < (s.length() / 2) + 1; i++)
{
String result = "";
String prev = "";
int count = 1;
for(int j = 0; j < (s.length() / i) + 1; j++)
{
int start = j * i;
int end = start+i;
if (end > s.length())
{
end = s.length();
}
String current = s.substring(start, end);
if (prev.equals(current) && !prev.equals(""))
{
count++;
continue;
}
prev = current;
result += parseString(count, prev);
count = 1;
}
System.out.println(i + "묶음 : " + result);
if (resultCount > result.length())
{
resultCount = result.length();
}
}
return resultCount;
}
static String parseString(int count, String str)
{
if (count <= 1)
{
return str;
}
return count+str;
}
}
반응형