프로그래머스 - 문자열 정렬하기 (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