프로그래밍/Algorithm

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

모지사바하 2015. 8. 3. 17:33
import scala.StringBuilder

/**
* Created by kwo2002 on 2015-08-03.
*/
object ZipString {

def zipString(str: String): String = {
def go(n: Int, cnt: Int, zipString: StringBuilder): String = {

if (cnt == 1) {
zipString.append(str.charAt(n))
}

if (n >= str.length - 1) {
zipString.append(cnt)
zipString.toString()
} else {
if (str.charAt(n) == str.charAt(n + 1)) {
go(n + 1, cnt + 1, zipString)

} else {

zipString.append(cnt)

go(n + 1, 1, zipString)
}
}
}

val zipStr: String = go(0, 1, new StringBuilder)

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

def main(args: Array[String]) {
println(zipString("aaabccddeeeffffffffffffffffffffffffe"))
}

}

1. 문자가 1개이더라도 압축문자열에 1 포함시키도록 수정.

2. 압축된 문자열이 원래 문자열에 비해 크거나 같으면 원래 문자열을, 아니면 압축된 문자열을 리턴하는 조건 추가