하샤드 수

Anna·2024년 6월 21일

코딩테스트

목록 보기
14/28
post-thumbnail

📖 문제

양의 정수 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차 풀이

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

문제점

  1. i는 현재 string타입으로 되어 있다. → int로 변경
  2. result는 val로 선언 되어 있다. → var변경

👻 수정

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 != "")를 넣어줘야 하는 이유!!

"" 사용 잘 안한다. 앞 뒤 여백이 생길 수 있다.


👻 튜터님 추천 풀이 (1)

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() } 값이 비어있지 않는 것만 필터링

👻 튜터님 추천 풀이 (2)

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 사용하지 않아도됨


📖 회고

나는 이해가 안되면 못 넘어감 ← 이러면 안됨

→ 중요한 개념이면 파는 게 맞음

→ 꼭 알아야 하는 건가요? 라고 물어보기!

0개의 댓글