알고리즘 CODEKATA 21 (하샤드 수)

오리너구리·2024년 5월 29일
0

CODEKATA

목록 보기
21/57

문제 설명

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


제한 조건

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

내 풀이

class Solution {
    fun solution(x: Int): Boolean {
        var answer = true
        var digitXSum = x.toString().map{it.toString().toInt()}.sum() 

        if(x % digitXSum ==0){
            answer = true
        }else{
            answer = false
        }

        return answer
    }
}

내가 푼 과정

  1. 일단 x의 자릿수 합을 구해야해서 digitXSum 변수를 만들어서 x자릿수의 자릿수 합을 넣으려고함
var digitXSum = x.toString().map{it.toInt()}.sum() 

출력을 해보니 값이 이상해서 생각해보니 toString()을 빼먹음

var digitXSum = x.toString().map{it.toString().toInt()}.sum() 

이걸 자꾸 까먹게 되는데 Char 값으로 저장된 값을 그냥 Int로 변환해버리면 이상해진다..

toString() 까먹지마…

  1. if 문 사용해서 x를 digitXSum으로 나눈 나머지가 0 이면 true 아니면 false 나오게 해줌
class Solution {
    fun solution(x: Int): Boolean {
        var answer = true
        var digitXSum = x.toString().map{it.toString().toInt()}.sum() 

        if(x % digitXSum ==0){
            answer = true
        }else{
            answer = false
        }

        return answer
    }
}

다른 사람 풀이

class Solution {
    fun solution(x: Int): Boolean {
        var sum = 0
        var num = x

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

        return (x % sum == 0)
    }
}

확장함수를 사용하지 않고 while문으로 x의 자릿수를 직접 더한 분 도 계셨다

class Solution {
    fun solution(x: Int): Boolean =
        x % x.toString().sumBy { it.toInt() - 48 } == 0
}

.sumBy 라는 함수를 사용하신 분도 계심

근데 아직 모르는 함수라서 나중에 공부해보기!


하샤드 수

하샤드 수 어떻게 구하는지는 알겠는데 저거 구해서 어디에 쓰는지 궁금해서 물어봄

하샤드 수의 쓰임

  1. 수학적 연구

    수 이론 연구에서 중요한 역할을 합니다. 특히, 디지털 루트(digital root)와 관련된 연구에서 자주 언급됩니다. 디지털 루트는 하샤드 수의 성질과 밀접한 관련이 있습니다.

  2. 컴퓨터 과학, 알고리즘
    하샤드 수를 찾는 알고리즘은 컴퓨터 과학에서 연습 문제로 자주 사용됩니다.

  3. 나눗셈 연습 도구

    학생들에게 기초적인 수학 개념을 가르치는 데 유용합니다. 자릿수 합을 계산하고, 나눗셈의 기본 개념을 이해하는 데 도움을 줍니다.

  4. 난수 생성
    일부 난수 생성 알고리즘에서 하샤드 수를 사용하여 특정 패턴을 따르는 수열을 생성할 수 있습니다.

결국 내가 일상적인 코딩할 때 사용할 일은 없을 듯 속이 뻥~

profile
오리너구리입니다

0개의 댓글