[프로그래머스] 하샤드 수

neoneoneo·2024년 2월 26일
0

kotlin

목록 보기
3/49

문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

나의 풀이

class Solution {
    fun solution(x: Int): Boolean {
        var answer = true
        var stringX = x.toString()
        var sum = stringX.map {it.toString().toInt()}.sum()
        
        if (x%sum == 0) answer = true else answer = false       
        return answer
    }
}

고수의 풀이

class Solution {
    fun solution(x: Int): Boolean {
        return x % x.toString().fold(0){acc, c -> acc + c.toInt() - 48} == 0
      }
}

배운점

  • 고수는 fold()를 이용하여 쉽게 풀어내었다.
    • fold는 문자열의 각 문자를 순회하여 누적 합을 구하는 데에 활용된다.
    • fold 함수의 형태
      inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R
    • initial : 초기값으로 누적값의 초기 상태
    • operation : 각 요소를 처리할 때 호출되는 람다 식으로 새로운 누적값을 반환함
      • acc : 현재까지의 누적값
      • T : 현재 요소
    • 또한 c.toInt() - 48을 하여 각 문자를 숫자로 변환하였다. ASCII코드에서 숫자 0은 48이므로, 0을 빼서 해당 문자를 정수로 변환한다.
    • 마지막의 ==0 부분은 x를 누적 합으로 나누어 떨어지는지 여부를 판별한다는 것을 의미한다.

[TIL-240226]

0개의 댓글