문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.

Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요. 예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.

풀이 1

public class HarshadNumber{
	public boolean isHarshad(int num){
        String[] array = String.valueOf(num).split("");
        int sum = 0;

        for(String str : array){
           sum += Integer.parseInt(str);
        }
        
        return num%sum == 0;
	}

  

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void  main(String[] args){
        HarshadNumber sn = new HarshadNumber();
        System.out.println(sn.isHarshad(18));
    }
}

입력받은 수를 String으로 바꿔서 split해준 후, 배열 안의 수를 다 더하여 입력받은 num과 나누어 나온 결과를 리턴해준다. 보통 이렇게 많이 푼 것 같다.

풀이 2

import java.util.function.IntConsumer;

public class HarshadNumber{
    private int sum = 0;
    public boolean isHarshad(int num){
        sum = 0;
        Integer.toString(num).chars().forEach(c -> sum += c - '0');
        return num % sum == 0;
    }

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void  main(String[] args){
        HarshadNumber sn = new HarshadNumber();
 	   System.out.println(sn.isHarshad(18));
    }
}

라이브러리와 람다식 장인의 풀이.

풀이 3

public class HarshadNumber{
    public boolean isHarshad(int num){
        int mod = num;
        int calc = 0;
        do{
			calc+=(mod%10);
        	mod = mod/10;
        }while(mod%10 > 0);

        return num%calc == 0;
    }
}

10을 나눈 후의 나머지로 각각 10의 자리, 1의 자리 수를 구한 풀이이다.