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
}
}
문제를 모르겠다. 구글에서 검색을 했다.
블로그 참조한 글이다.
이해
- x % ( x 자릿수의 합 ) == 0 -> 하샤드
- Return true/false
접근
- map으로 x를 배열화 시켜 요소값의 합을 구해 자리값의 합을 구한다
- 나눠서 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의 거듭제곱인 수 (자명하다. 자릿수의 합이 1이며, 모든 자연수는 1로 나누어떨어지기 때문)
-
한 자리 수 혹은 다른 하샤드 수에 10의 거듭제곱인 수를 곱한 수[1]
-
나무위키를 한번 더 읽어봤다. 무슨내용인지 모르겠다.
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 |