양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
문제해석
x = 12 가정
1. 각자리 수의 합을 먼저 구해야 함 → 1 + 2 = 3
2. x가 3을 나누었을 때 맞아 떨어지면
3. x는 12의 하샤드 수다 → 논리형 데이터 타입으로 리턴
x는 1 이상, 10000 이하인 정수입니다.// 1. .toString().split("") 문자열 분활
// 2. for문을 이용해 자릿수 더하기
// 3. if문을 이용해 입력 값이 x를 나누었을 때 떨어지면 true else false 리턴
class Solution
{
fun solution(x: Int): Boolean
{
val num = x.toString().split("")
val result = 0
for(i in num)
{
if(i != "") result += i
}
return if (x % result == 0) true
else false
}
}
문제점
class Solution
{
fun solution(x: Int): Boolean
{
val num = x.toString().split("")
var result = 0
for(i in num)
{
if(i != "") result += i.toInt()
}
return if (x % result == 0) true
else false
}
}
❓ if(i != "")를 넣어줘야 하는 이유!!
❓ "" 사용 잘 안한다. 앞 뒤 여백이 생길 수 있다.
class Solution
{
fun solution(x: String): Boolean
{
val num = x.split("").filter { it.isNotEmpty() }
var result = 0
for (i in num) result += i.toInt()
return true
}
}
.filter { it.isNotEmpty() } 값이 비어있지 않는 것만 필터링
class Solution
{
fun solution(x: String): Boolean
{
val num = x.toList()
var result = 0
for (i in num) result += i.toInt()
return true
}
}
바로 list로 반복
class Solution
{
fun solution(x: Int): Boolean
{
return x % x.toString().fold(0){acc, c -> acc + c.toInt() - 48} == 0
}
}
.fold() .reduce컬랙션 내의 데이터를 모두 모으는(accumulate) 함수
❓ string에 왜 가능?? ← .fold()가 하나 씩 꺼내주기 때문에 list 사용하지 않아도됨
나는 이해가 안되면 못 넘어감 ← 이러면 안됨
→ 중요한 개념이면 파는 게 맞음
→ 꼭 알아야 하는 건가요? 라고 물어보기!