프로그래머스 - 문자열 정렬하기 (1)
아직 람다 함수나 확장 함수를 잘 몰라서 그런지 내가 생각하는대로 코드를 구현하기가 조금 어렵다.
그래서 이번 문자열 정렬하기 문제도 sorted와 정규표현식을 사용하고 싶었는데...딱 그것만 떠오르고 전체적인 코드가 잘 생각 안났다😂
[문제 설명]
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.[제한사항]
- 1 ≤ my_string의 길이 ≤ 100
- my_string에는 숫자가 한 개 이상 포함되어 있습니다.
- my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
정규표현식을 쓰고 싶었는데 잘 안되서 검색해보다가 filter
와 isDigit
을 사용해서 작성했다.
그러다가 구글링을 해서 정규표현식을 사용해서 하는 방법도 찾았다!
그리고 정규표현식을 사용해서 숫자가 아닌 값은 삭제하기 위해 removeAll
을 사용하려고 했는데 removeAll
은 String
타입에서 작동하지 않기 때문에 replace
를 사용하였다.
class Solution {
fun solution(my_string: String) = my_string.filter{it.isDigit()}.map{it.toString().toInt()}.sorted().toIntArray()
}
풀어서 적어보자면 아래와 같다.
class Solution {
fun solution(my_string: String): IntArray {
val nums = my_string.filter {it.isDigit()}.map {it.toString().toInt()}
val sortedNums = nums.sorted()
return sortedNums.toIntArray()
}
}
my_string
에서 숫자만 필터링하여 List<Int>
로 변환nums
를 오름차순으로 정렬sortedNums
를 IntArray
로 변환하여 반환class Solution {
fun solution(my_string: String) = my_string.replace("[a-z]".toRegex(), "")
.toList()
.sorted()
.map{it.toString().toInt()}
.toIntArray()
}
풀어서 적어보자면 아래와 같다.
class Solution {
fun solution(myString: String): IntArray {
val filteredString = myString.replace("[a-z]".toRegex(), "")
val charList = filteredString.toList()
val sortedList = charList.sorted()
val intList = sortedList.map{it.toString().toInt()}
return intList.toIntArray()
}
}
[|a-z]
를 사용하여 my_string
문자열에서 알파벳 소문자를 빈 문자열""
로 대체toList
를 사용하여 리스트로 변환sorted
를 사용하여 오름차순으로 정렬map{it.toString().toInt()}
를 사용하여 문자에서 정수로 변환IntArray
로 변환하여 반환[참고 사이트]
'[Kotlin] 코틀린 Collection에서 사용하는 Filter 함수', yena
'🤨 코딩테스트 01 : 문자열 다루기 기본', amid.jungs
'[Kotlin] 문자열에서 특정 문자 변경, 제거', 코드다이어리
'[정규표현식] 정규표현식(Regular Expression)', twaun.log