https://school.programmers.co.kr/learn/courses/30/lessons/120850
문제
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해 보세요.
제한사항
1 ≤ my_string의 길이 ≤ 100
my_string에는 숫자가 한 개 이상 포함되어 있습니다.
my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
풀이
class Solution1 {
fun solution(my_string: String) = my_string.filter { it.isDigit() }.map { it - '0' }.sorted()
}
class Solution2 {
fun solution(my_string: String): List<Int> {
val arr = IntArray(10)
my_string.forEach { if (it in '0'..'9') arr[it - '0']++ }
val list = mutableListOf<Int>()
arr.forEachIndexed { index, i ->
repeat(i){
list.add(index)
}
}
return list
}
}
- 해당 문제를 2가지 방법으로 풀어보았습니다.
- 1번 풀이 같은 경우 스코프함수를 이용하여 문자열을 리스트의 형식으로 변형하는 방법입니다.
- 2번 풀이 같은 경우 배열을 만들어 문자열을 순환하면서 숫자가나오는 부분일 경우 해당 배열의 값을 1 늘려줍니다. 이후 저장된 배열의 값을 순환하면서 위처럼 리스트에 넣어줍니다.
- 이 2가지 방법은 코드량에서 차이가 보입니다. 1번풀이같은 경우 가독성이 좋고 짧지만 그만큼 여러 작업을 내부에서 합니다. 이경우 매번 순환하고 지금 상황에서는 필요 없는 작업들도 수행이 되므로 속력이 느려집니다. 그렇지만 2번 같은 경우 필요한 만큼만 최소한의 작업으로 수행이 되기 때문에 1번 풀이와 속력면에서 큰 차이가 보입니다. 그렇지만 1번 풀이의 풀이보다는 길며 가독성 좋지 못합니다. 방법을 선택하는 것은 본인마음이지만 최적화면에서 보았을 때는 2번이 더 좋아 보입니다.
결과
'코틀린 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 대문자와 소문자 (Kotlin) (0) | 2023.07.27 |
---|---|
[프로그래머스] - 중복된 문자 제거 (1) (Kotlin) (0) | 2023.07.26 |
[프로그래머스] - 최댓값 만들기 (1) (Kotlin) (0) | 2023.07.26 |
[프로그래머스] - 점의 위치 구하기 (Kotlin) (0) | 2023.07.25 |
[프로그래머스] - 가위 바위 보 (Kotlin) (0) | 2023.07.25 |