달달한 스토리

728x90
반응형

출처 핀터레스트

 

문제를 풀어보자.

 

첫 문제는 약수의 개수에 따라 덧셈을 할지 빼야 할지 정해서 값을 산출하는 문제이다.

 

약수의 개수와 덧셈

 

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()
}

 

조금 푸는데 복잡했지만,

 

mapIndexed를 통해서 잘 풀었다.

 

배열에서 전달받은 인덱스와, 요소를 다시 mapIndexed 메서드를 통해

 

배열 안에 인덱스와 요소를 가져온다.

 

원하는 수식을 써주고,

 

IntArray로 변환하고,

 

마무리로,

 

Array변환을 위한 toTypeArray 메서드로 마무리해준다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading