문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해 주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한 조건
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr [j]입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
입출력 예
arr | divisor | return |
[5, 9, 7, 10] | 5 | [5, 10] |
[2, 36, 1, 3] | 1 | [1, 2, 3, 36] |
코드
class Solution {
fun solution(arr: IntArray, divisor: Int) = arr.filter{it -> it % divisor == 0}.sorted().run {
if(isEmpty())
intArrayOf(-1)
else
this
}
}
풀이
배열을 통해 배열을 리턴하면 되므로 kotlin collection operations를 잘 활용하면 간단하게 풀 수 있는 문제이다.
입력되는 arr에서 divisor로 나누어 떨어지는 배열의 요소만 반환하고 싶다고 한다.
배열, 리스트 등에서 조건에 의해 필터링된 다른 배열, 리스트를 반환하고 싶다면 filter메서드에 조건식을 넘겨주면 조건식으로 필터링된 배열, 리스트가 반환이 된다. 그래서 it % divisor == 0으로 입력배열에서 divisor로 나누어 떨어지는 배열은 먼저 구한다.
문제에서 원하는 것은 오름차순으로 정렬된 배열이므로 sorted() 메서드를 통해 오름차순 정렬을 해준다.
마지막 조건으로 'divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.'라고 하였는데,
이는 필터링된 배열이 없으면 [-1]을 반환하라는 소리이므로 최종적으로 정렬된 배열에 scope함수를 적용하여
비어있으면 -1만 있는 배열을 반환하도록 하고 그렇지 않으면 정렬된 배열 그 자체를 반환시킨다.
결과
안정적으로 통과한 것을 볼 수 있다.
'PS > programmers' 카테고리의 다른 글
[programmers] [Kotlin] 콜라츠 추측 (0) | 2023.08.23 |
---|---|
[programmers] [Kotlin] 3진법 뒤집기 (0) | 2023.08.11 |
[programmers] [Kotlin] 숫자 문자열과 영단어 (0) | 2023.08.10 |
[programmers][Kotlin] 캐릭터의 좌표 (0) | 2023.08.08 |
[programmers][Kotlin] 문자열 내 마음대로 정렬하기 (0) | 2023.08.07 |