# 문제
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
# 제한 조건
x는 1 이상, 10000 이하인 정수입니다.
#입출력 예
ex) 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
ex) 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
ex) 11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다
ex) 13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
# 풀이
class Solution {
fun solution(x: Int): Boolean {
var sum = 0
var X = x
while (X != 0) {
sum += X % 10
X /= 10
}
return (x % sum == 0)
}
}
각자리수를 분리해준다음 더해주는 작업을 해야될텐데
10으로 나눈 나머지가 일의자리숫자가 될것인데 그값을 sum과 더한뒤 sum값에 넣어준다
그다음 X /= 10을 통해 X에 X/10을 한값을 넣어주면서 각 자리를 분리시켜주고,
X가 0이되면 반복문을 탈출하고 return값을 실행해서 ture 또는 false값을 반환해준다
x =12라고 가정해보자
X가 0이 아닐때까지 while문을 돌면 sum=0+2 , X=1 가 될것이다
아직 X가 0이 아니니깐 반복문을 또 돌면
sum = 2+1, X=0
이제 반복문을 빠져나와서 12%3==0이 참이니깐 true를 리턴해준다
# 각 자리숫자를 분리할땐 10으로 나눈 나머지와, 몫을 반복문을 통해 구해주면 된다
# 다른사람 풀이
class Solution {
fun solution(x: Int): Boolean =
x % x.toString().toList().map { it.toInt() - '0'.toInt() }.sum() == 0
}
class Solution {
fun solution(x: Int): Boolean {
return x % x.toString().fold(0){acc, c -> acc + c.toInt() - 48} == 0
}
}
'개발 노트 > 알고리즘[Kotlin]' 카테고리의 다른 글
프로그래머스 알고리즘 문제[콜라츠 추측] (0) | 2024.03.22 |
---|---|
프로그래머스 알고리즘 문제[두 정수 사이의 합] (0) | 2024.03.22 |
프로그래머스 알고리즘 문제[정수 내림차순으로 배치하기] (1) | 2024.03.15 |
프로그래머스 알고리즘 문제[정수 제곱근 판별] (0) | 2024.03.14 |
프로그래머스 알고리즘 문제[문자열을 정수로 바꾸기] (0) | 2024.03.11 |