오늘은 계산기 과제로 바쁜 관계로 알고리즘 1문제만 간단히 살펴보자.
하샤드 수는 각 자릿수의 합으로 자신이 나누어 떨어지는 수다. 판별하여 불리언을 반환하는 문제다.
// 풀이
fun solution(x: Int): Boolean {
val s = x.toString()
var ds = 0
for (c in s) ds += c - '0'
if (x % ds == 0) return true
return false }
수를 toString 하고 for문 돌려서 자릿수를 합해 나누어떨어지는지 판별했다.
로직은 개선할 부분이 딱히 없다. 하지만 여기에 sumOf를 끼얹는다면?
fun solution(x: Int): Boolean =
x % x.toString().sumOf { it - '0' } == 0
이렇게 압축된다.
sumOf를 도입해 for문을 대신했고, 누적합을 위한 변수도 없앴다.
그리고 반환값이 불리언이므로 == 0에 대해 if문을 다시 수행할 필요 없이 불리언값 그대로 반환해주면 되므로 if를 생략해주었다.