이어서.. 기술한다.
처음 봤을때 든 생각은 배열에 숫자와 문자가 섞였을 때 어떻게 하면 숫자만 골라내지 였다.
알고 있는 상식에서는 또 반복문을 돌려서 하나하나 숫자인지 문자열인지 비교해보고 숫자만 골라내서 새로운 배열에 넣는 방식을 생각해봤는데, 어제 경험에서 비롯되어 내가 생각하고 있는 풀보다 코틀린에서 제공하는 다양한 함수를 이용하면 생각보다 더 간단하게 할 수 있지 않을까 라는 생각에, 구글링을 통해 지식을 얻어보았다.
이것을 역으로 이용한다면 문자를 제외하고 숫자만 뽑아낼 수 있을 것 같다는 생각이 들었다.
class Solution {
fun solution(my_string: String): IntArray {
val intArray: IntArray
intArray = my_string.filterIsInstance<Int>().filter {
it.sorted()
}
var answer: IntArray = intArray
return answer
}
}
내 머릿속에서는 정수형 리스트 intArray를 선언 한 뒤
위에서 찾은 함수로 정수형 변수들만 뽑아서 sorted함수로 오름차순으로 정렬하려 했지만
오류가 발생했다..
역시 모르는 부분을 다시 구글링 해보니 filter함수 안에서 it을 sorted로 정리 할수 없다고 나왔다. 또한 FilterIsInstance 는 <>안의 변수형으로 전환할 수 없는 문자열이 들어오면 오류가 발생한다고 한다.
해서 다른 방법을 고안해보았다. 예제에서 주어지는 "hi12392" 배열을 문자 하나씩 비교해 본 뒤 문자인 경우를 제외 하고 정수형인 경우만 뽑아내서 새로운 리스트를 만드는 것이다.(뭔가 처음으로 돌아간 느낌이었다.. 노가다 하기 싫었는데 하는 느낌?)
class Solution {
fun solution(my_string: String): IntArray {
val intArray = mutableListOf<Int>()
for(char in my_string){
if(char.isDigit()){
intArray.add(char.toString().toInt())
}
}
val answer = intArray.sorted().toIntArray()
return answer
}
}
먼저 새로운 빈 배열을 자유롭게 변형가능한 mutableListOf 함수로 만들어 준다.
그 다음 문자열 속 문자 하나하나 비교해보고 숫자일 경우/isDigit()/ 아까 만든 배열에 추가한다.
마지막으로 만든 배열속 숫자들을 오름차순으로 정리한다/sorted()/
기존에 가지고 있던 상식들은 대부분 노가다를 통한 해결이었는데 코틀린은 생각보다 이런 노가다를 줄여주는 편리한 함수들을 많이 가지고 있다는 것을 알게 되었다.
동시에 이런 의문이 들었다. 기존에 가지고 있던 방식들이 다 노가다를 베이스로 한다면 노베이스에서 시작하는 지금 먼저 함수들을 공부하고 시작하는 것이 좋을 지 아니면 노가다를 해결해 주는 함수를 찾고 시작해도 되는지, 함수들을 찾고 시작한다는 것이 스스로 고민을 해보지 않는 것이 되버리는지에 대 한 의문이 들었다.