본문 바로가기
코드 알고리즘

<코드카타> 하샤드의 수

by 수바니 2024. 8. 9.

하샤드 수(harshad number)

주어진 진법에서 그 수의 각 자릿수 숫자의 합으로 나누어떨어지는 자연수

 

 

예를 들어 12는 각 자릿수 숫자의 합이 1+2=3이고, 12가 3으로 나누어떨어지므로 12는 10진법에서 하샤드 수다.

그러나 16은 1+6=7이고, 16이 7로 나누어떨어지지 않으므로 16은 10진법에서 하샤드 수가 아니다.

 

class Solution {
    public boolean solution(int x) {
        int sum = 0;
        int num = x;
        
        while(num > 0){
            sum += num % 10;
            num /= 10;
        } 
        if(x % sum == 0){
            return true;
        } else{
            return false;
        }

    }
}

 

int num = x;로 선언한이유

while문에서 x 값을 그대로 넣으면

x값이 계속해서 변경되기 때문에 마지막 if 문에 sum값과 x를 활용하지 못한다.

 

 

int x = 123일경우

while( num > 0 ) num이 0보다 클경우 계속 while문을 돈다.

 

첫번째 while문

sum = 123 % 10 = 3

sum = 3

num /= 10  = 12

num = 12 이므로 0보다 크므로 while문 으로 다시 돌아간다.

 

두번째 while문

num(12) % 10 = 2

sum = 3 + 2 = 5

num /= 10 = 1

num = 1 이므로 0보다 크므로 while문 한바퀴 더 돈다.

.

세번째 while문

num(1) % 10 = 1

sum = 3 + 2 + 1 = 6

num /= 10 = 0

num = 0 이므로 while문 탈출

sum = 6 된다.

 

즉, sum = 각 자리수 의 합

x를 sum에 나누고 나머지가 0이면 true 를 반환하고,

아닐경우 false를 반환한다.