프로그래밍/Algorithm

주어진 문자배열내의 공백을 모두 %20으로 바꾸는 메소드를 작성하라.

모지사바하 2015. 8. 3. 11:40
/**
* Created by kwo2002 on 2015-07-30.
*/
object RelpaceSpace {

def replaceSpace(cArr: Array[Char], n: Int): Array[Char] = {

//새로운 배열 사이즈를 얻기 위한 loop
def getNewArraySize(i: Int, newSize: Int): Int = {
if (i >= n) newSize
else {
if (cArr(i) == ' ') {
getNewArraySize(i + 1, newSize + 2)
} else {
getNewArraySize(i + 1, newSize)
}
}
}

def repChar(i: Int, i2: Int, newArr: Array[Char]): Array[Char] = {
if (i >= n) {
newArr
} else {
if (cArr(i) == ' ') {
newArr(i2) = '%'
newArr(i2 + 1) = '2'
newArr(i2 + 2) = '0'

repChar(i + 1, i2 + 3, newArr)
} else {
newArr(i2) = cArr(i)
repChar(i + 1, i2 + 1, newArr)
}

}
}

repChar(0, 0, new Array[Char](getNewArraySize(0, n)))
}

def main(args: Array[String]) {
println(replaceSpace(Array('M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'b', 'i', 'n', ' ', ' ', ' '), 14).deep)
}

}

문제 ) 주어진 문자배열내의 공백을 모두 %20으로 바꾸는 메소드를 작성하라.

문자열 끝에 추가로 필요한 문자들을 더할 수 있는 충분한 공간이 있다고 가정하라.

그리고 공백을 포함하는 문자 배열의 길이도 함께 주어진다고 가정하라.


회상.

1. 공백을 %20으로 변환하여 담을 새로운 길이의 문자 배열이 필요함.

2. 새로운 길이를 구하기 위해 주어진 문자 배열을 loop 하면서 공백인 문자를 만나면 제공되는 길이에 + 2 를 해줌.

3. 새로운 길이로 빈배열을 생성하여 주어진 문자배열을 loop하는데 loop 인자로 주어진 문자배열 loop 인덱스와 빈배열 loop 인덱스를 넘겨줌

4. 공백을 만나면 빈배열에 %20을 넣어줌 . 공백이 아니면 주어진 문자배열 요소를 그대로 넣어줌.



더 나은 방법이 없는지 생각해보자..


스칼라 명명 관례가 자바랑 달라서, 어떻게 명명 해야할지 잘모르겠다. 스칼라는 한글자 명명법이 관례라고 하는데 한글자로 하면 뭐하는 놈인지 알기가 힘들것같은데 ...