문제
- 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
내 생각
set 사용하여 중복되는 값 제거하면 쉽게 풀 수 있을 것 같다.
풀이
class Solution {
fun solution(numbers: IntArray): IntArray {
var answer = mutableSetOf<Int>()
for (i in 1 until numbers.size) {
for (j in i until numbers.size)
answer.add(numbers[i - 1] + numbers[j])
}
return answer.sorted().toIntArray()
}
}
다른 사람의 풀이
class Solution {
fun solution(numbers: IntArray): IntArray {
val list = numbers.toList()
return list.withIndex().flatMap { i -> list.withIndex().map { j -> i to j } }
.filter { it.first.index != it.second.index }
.map { it.first.value + it.second.value }
.toSortedSet()
.toIntArray()
}
}
알게된 점
withIndex
- 인덱스와 값을 한꺼번에 조회 가능하다.
for ((idx, value) in array.withIndex()) {
}
FlatMap
- 매핑 함수를 사용해 각 엘리먼트에 대해 map을 수행한 후, 결과를 새로운 배열로 평평화한다.
- map처럼 배열을 리턴한다.
- map은 1:1 매핑이지만, flatMap은 1:1 뿐만 아니라 1:다 매핑이 가능하다.
fun main() {
val arr = listOf("DF")
val arrMap = arr.map { "$it" }
println(arrMap) //[DF]
val arrFlatMap = arr.flatMap { "$it".toList() }
println(arrFlatMap) //[D, F]
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스_Kotlin] 푸드 파이트 대회 (0) | 2024.02.05 |
---|---|
[프로그래머스_Kotlin] 가장 가까운 같은 글자 (0) | 2024.02.05 |
[프로그래머스_Kotlin] 문자열 내 마음대로 정렬하기 (0) | 2024.02.03 |
[프로그래머스_Kotlin] K번째수 (0) | 2024.02.03 |
[프로그래머스_Kotlin] 숫자 문자열과 영단어 (0) | 2024.02.02 |