본문 바로가기
프로그래머스 Algorithm

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

by Echung 2023. 11. 14.

안녕하세요. 이번에는 프로그래머스 하샤드 수를 풀어보려고 합니다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/12947

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Problem

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

 

[제한 사항]

x는 1 이상, 10000 이하인 정수입니다.

사진 1. 입출력 예

Solution

class Solution {
    fun solution(x: Int): Boolean {
        var answer = true

        var num = x
        var sum: Int = 0

        while(num > 0) {
            sum += num % 10
            num = num / 10
        }

        return (x % sum == 0)
    }
}

 이번 문제는 while문을 사용해서 모든 자릿수의 합을 sum에 합하고 마지막으로 원래 값 x에 모든 자릿수의 합을 나누는 방식으로 문제를 접근하였다. 

 

1. 다른 사람 코드

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

  다른 사람은 fold() 함수를 사용해서 문제에 접근한 방법이 있었다. fold 함수는 코틀린에서 컬렉션에 있는 요소를 누적해서 더하여 반환하는 함수이다. 나중에 따로 fold() 함수를 포스팅해봐야겠다.


Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형