본문 바로가기
Kotlin/Exercise

정사각형의 차이

by 봄석 2019. 3. 17.

정사각형의 차이


합계의 제곱과 첫 번째 N 개의 자연수의 제곱의 합계 사이의 차이점을 찾습니다.

처음 10 개의 자연수의 합의 제곱은 (1 + 2 + ... + 10) ² = 55² = 3025입니다.

처음 10 개의 자연수의 제곱의 합은 1² + 2² + ... + 10² = 385입니다.

따라서 처음 10 개의 자연수 합계의 제곱과 처음 10 개의 자연수 제곱 합계의 차이는 3025 - 385 = 2640입니다.


TestCode

class SquaresTest {
   @Test
    fun squareOfSum1() {
        assertEquals(1, Squares(1).squareOfSum())
    }
 
    @Test
    fun squareOfSum5() {
        assertEquals(225, Squares(5).squareOfSum())
    }
 
    @Test
    fun squareOfSum100() {
        assertEquals(25502500, Squares(100).squareOfSum())
    }
 
    @Test
    fun sumOfSquares1() {
        assertEquals(1, Squares(1).sumOfSquares())
    }
 
    @Test
    fun sumOfSquares5() {
        assertEquals(55, Squares(5).sumOfSquares())
    }
 
    @Test
    fun sumOfSquares100() {
        assertEquals(338350, Squares(100).sumOfSquares())
    }
 
    @Test
    fun differenceOfSquares1() {
        assertEquals(0, Squares(1).difference())
    }
 
    @Test
    fun differenceOfSquares5() {
        assertEquals(170, Squares(5).difference())
    }
 
    @Test
    fun differenceOfSquares100() {
        assertEquals(25164150, Squares(100).difference())
    }
 
}



해결안 1 ) while

class Squares(var input: Int) {
    var input2 =input
    fun squareOfSum(): Int {
        var result = 0
        while (input > 0) {
            result += input
            input--
        }
        return result * result
    }
 
 
    fun sumOfSquares(): Int {
        var result = 0
        while (input2 > 0) {
            result += input2 * input2
            input2--
        }
        return result
    }
 
    fun difference():Int {
        val ho1=squareOfSum()
        val ho2=sumOfSquares()
        return ho1-ho2
    }
}


1 )while 을 사용해 들어온 input 값을 계산하고 , 하나씩 감소합니다 .


해결안2) Int.rangeTo() , sum() , sumBy(), let

class Squares(val input: Int) {
        fun squareOfSum() = 1.rangeTo(input).sum().let { it * it }
        fun sumOfSquares() = 1.rangeTo(input).sumBy { it * it }
        fun difference() = squareOfSum() - sumOfSquares()
    }


1 ) Int.rangeTo() 함수를 사용하여 intRange를 생성합니다 .  ( 1..input) 이런식으로도 생성가능합니다

2 ) sum()함수를 이용해 IntRange의 합을 구합니다 . 

3) let 함수를 이용해 자기자신을 곱한 값을 리턴합니다 .

4) sumOfSquares() 도 마찬가지로 , IntRange를 구한 후 , sumBy() 함수를 통해  intRange에 속하는 각각의 값을 제곱한후 , 합해줍니다 .

5) 둘의 차이를 구해줍니다. 

댓글