정사각형의 차이
합계의 제곱과 첫 번째 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) 둘의 차이를 구해줍니다.
'Kotlin > Exercise' 카테고리의 다른 글
완벽한 숫자 - 자연수에대한 (2) | 2019.03.27 |
---|---|
비밀 악수 - 10진수와 2진수 (4) | 2019.03.20 |
스크래블 스코어 - 주어진 단어에대하여 점수 계산하기 (4) | 2019.03.17 |
어구를 약어로 변경하기 (2) | 2019.03.14 |
스트링 뒤집기 (2) | 2019.03.13 |
댓글