개발일지

2024.01.02 TIL

과일바구니♡ 2024. 1. 2. 21:28

1. 배운내용

   1) 알고리즘 코드카타

      하샤드의 수

   

문제 설명

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

제한 조건
  • x는 1 이상, 10000 이하인 정수입니다.
입출력 예
arr return
10 true
12 true
11 false
13 false
입출력 예 설명

입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.

입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.

입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.

입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

초기코드

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

 

정답

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

 

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)
    }
}

 

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

           answer = if(x > sum)
              x % sum == 0
           else
              sum % x == 0

        return answer
    }
}

 

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

        for(i in 0..x.toString().length-1){
            sum += x2%10
            x2 = x2/10
        }

        return x % sum ==0
    }
}

 

class Solution {
    fun main() {
        print(solution(10))
    }
    fun solution(x: Int):Boolean {
        var answer = true
        var sum = 0
        var same = x
        while (same > 0) {
            sum += same % 10
            same = same / 10
        }

        if (x % sum == 0)
            answer = true
        else
            answer = false

        return answer
    }
}

 

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

        for(i in x.toString().chunked(1)) {
            sumOfDigit += i.toInt()
        }

        answer = when {
            (x % sumOfDigit == 0) -> true
            else -> false
        }

        return answer
    }
}

 

 

문제를 모르겠다. 구글에서 검색을 했다.

블로그 참조한 글이다.

이해

  1. x % ( x 자릿수의 합 ) == 0 -> 하샤드
  2. Return true/false

접근

  1. map으로 x를 배열화 시켜 요소값의 합을 구해 자리값의 합을 구한다
  2. 나눠서 0이 되는 값의 합을 구한다 -> 비교

풀이

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

        x.toString().map {
            sum += (it.toInt() - '0'.toInt())
        }
        return x % sum == 0
    }
}

다른 사람의 풀이

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

 

 

 

왜? 하샤드가 뭐지? 

하샤드의 수는 주어진 진법에서 그 수의 각 자릿수 숫자의 합으로 나누어떨어지는 자연수를 말한다. 라고 정의를 나무위키에서 봤다.

 

하샤드 수 또는 니번 수는 주어진 진법에서 그 의 각 자릿수 숫자 으로 그 수가 나누어지는 양의 정수를 말한다. 즉 이말은 하샤드 수의 정의가 자기자신이 각 자리숫자의 합의 몇 배가 되어서 약수 배수의 관계가 되는 수를 일컫는 말이다. 하샤드 수는 인도 수학자 카프레카에 의해 정의되었다.- 위키백과

다음의 경우 무조건 하샤드 수다.(해당 조건은 10진법을 기준으로 함)
  • 한 자리 수인 자연수 (자명하다. 자릿수가 하나밖에 없으며, 자기 자신의 수로 나누어떨어기지 때문)
  • 10의 거듭제곱인 수 (자명하다. 자릿수의 합이 1이며, 모든 자연수는 1로 나누어떨어지기 때문)
  • 한 자리 수 혹은 다른 하샤드 수에 10의 거듭제곱인 수를 곱한 수[1]
  • 각 자리의 합이 3이나 9[2]가 되는 수(혹은 각 자리의 합이 6이거나 18이면서 끝자리가 짝수[3], 각 자리의 합이 12이거나 36이면서 끝 두 자리가 4의 배수거나 각 자리의 합이 15이거나 45이면서 끝 자리가 5의 배수인 수처럼 각 자리의 합이 3*2n, 9*2n 혹은 3*5n, 9*5n 이면서 끝 자리가 2n, 5n(단, n은 자연수)의 배수라면 모두 하샤드 수)[4]
  • 해당 수의 자릿수가 3n인 동시에 모든 자리의 숫자가 같은 수 즉 3n의 자리를 가지는 레퓨닛수에 한자리 수를 곱한 수.[5]
  • 일의 자리가 0이고 일의 자리를 제외한 각 자리의 합이 90의 약수[6][7][8]가 되는 수
    • 일의 자리가 0, 5, 8이고 일의 자리를 제외한 각 자리의 합이 10이 되는 수[9][10]

나무위키를 한번 더 읽어봤다. 무슨내용인지 모르겠다.

 

2) 과제 코드 작성

  todo 카드 프로젝트 조회, 수정, 삭제를 코드작성해서 깃허브에 올릴 예정이다.

 

'개발일지' 카테고리의 다른 글

2024.1.4 TIL  (0) 2024.01.04
20204.1.3 TIL  (0) 2024.01.03
23023.12.29 TIL  (0) 2023.12.29
2023.12.28 TIL  (0) 2023.12.28
2023.12.27 TIL  (0) 2023.12.27