class Solution {
fun solution(left: Int, right: Int): Int {
var cnt: Int
var result = 0
for(i in left..right) {
cnt = 0
for(j in 1..i) if(i % j == 0) cnt++
if(cnt % 2 == 0) result += i
else result -= i
}
return result
}
}
처음에는 이런식으로 풀었는데, 코드가 난잡하고, 한눈에
알아보기가 힘들어, 답안을 보았는데,
한 줄에 깔끔하게 끝나는 코드를 발견할 수 있었다.
//약수의 개수와 덧셈
class NumberAndAdditionOfFactors {
fun solution(left: Int, right: Int): Int =
(left..right).sumOf { i -> if ((1..i).filter { i % it == 0 }.size % 2 == 0) i else -i }
}
그렇지만, 효율은 원래 코드가 더 좋았다..
가끔은 내장 함수는 간결한 코드를 내어주지만,
효율이 더 좋지 못한 경우도 다수 보여준다.
left에서 right까지 숫자를 파라미터로 넘겨주어,
만약 1에서 i까지의 값 중에서 filter 조건에 맞는(약수인 수)
값의 사이즈가 짝수인지 아닌지에 따라 더할지 뺄지를
결정해주는 메서드이다.
행렬의 덧셈
//행렬의 덧셈
class AdditionOfMatrices {
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> =
arr1.mapIndexed { pIndex, i ->
i.mapIndexed { cIndex, j ->
j + arr2[pIndex][cIndex]
}.toIntArray()
}.toTypedArray()
}