[TIL] #11 Programmers - Sort String (1)

Yeon·2023년 7월 28일
0

내일배움캠프 - Kotlin

목록 보기
13/58
post-thumbnail

프로그래머스 - 문자열 정렬하기 (1)

아직 람다 함수나 확장 함수를 잘 몰라서 그런지 내가 생각하는대로 코드를 구현하기가 조금 어렵다.
그래서 이번 문자열 정렬하기 문제도 sorted와 정규표현식을 사용하고 싶었는데...딱 그것만 떠오르고 전체적인 코드가 잘 생각 안났다😂




❓ Question

[문제 설명]
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

[제한사항]

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.



💡 Code

정규표현식을 쓰고 싶었는데 잘 안되서 검색해보다가 filterisDigit을 사용해서 작성했다.
그러다가 구글링을 해서 정규표현식을 사용해서 하는 방법도 찾았다!
그리고 정규표현식을 사용해서 숫자가 아닌 값은 삭제하기 위해 removeAll을 사용하려고 했는데 removeAllString 타입에서 작동하지 않기 때문에 replace를 사용하였다.

1. filter, isDigit

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를 오름차순으로 정렬
  • 정렬된 숫자 리스트sortedNumsIntArray로 변환하여 반환

2. replace, toRegex

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

0개의 댓글