프로그래밍/Algorithm

같은 문자가 반복될 경우, 그 횟수를 사용해 문자열을 압축하는 메소드를 구현하라.(3)

모지사바하 2015. 8. 3. 18:04
def zipString2(str: String): String = {

def go(i: Int, li: Int, cnt: Int, zipStr: StringBuilder): String = {
if (i >= str.length) {
zipStr.append(str.charAt(li))
zipStr.append(cnt)
zipStr.toString()
} else {
if (str.charAt(li) == str.charAt(i)) {
go(i + 1, li, cnt + 1, zipStr)
} else {
zipStr.append(str.charAt(li))
zipStr.append(cnt)
go(i + 1, i, 1, zipStr)
}
}
}
val zipStr: String = go(1, 0, 1, new StringBuilder)

if (zipStr.length >= str.length) {
str
} else {
zipStr
}

}

다른방법으로 구현해봄.


회고

1. 문자 압축을 하기전에 우선, 압축 문자열의 길이와 원래 문자열의 길이를 비교하고 압축을 할지 말지 결정하면 나은 성능이 나올것이다.