본문 바로가기

Algorithm/[Solve]Programmers

[Lv1/Java]하샤드 수

문제 설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

제한 조건

- x는 1이상, 10000 이하인 정수이다.

 

입출력 예

arr return
10 ture
12 true
11 false
13 false

Solution.java

//1차 풀이
class Solution {
    public boolean solution(int x) {
        boolean answer = true;
		int a,b,c,d;
		int s=0;
		if(10<=x&&x<100) {
			a=x/10;
			b=x%10;
			s=(a+b);
		} else if(100<=x&&x<1000) {
			a=x/100;
			b=(x%100)/10;
			c=(x%100)%10;
			s=(a+b+c);
		} else if(1000<=x&&x<10000) {
			a=x/1000;
			b=(x%1000)/100;
			c=(x%1000)%100/10;
			d=(x%1000)%100%10;
			s=(a+b+c+d);
		}
		if(x%s!=0) answer=false;
		return answer;
    }
}

실행 결과

테스트 17 > 실패(런타임 에러)

 

채점 결과

정확성 : 94.1

💥 제한조건이 있는 수라 수 범위를 정해 구해주려 했는데 런타임 오류가 나서 방법을 바꿔보았다.
💡 int[] 배열을 제한조건의 크기로 만들어 각 자리에 숫자가 들어가게 하였다.
💡 String[] arr = String.valueOf(num).split("") 을 사용해 String 배열을 만든 후 반복문을 통해
    int sum += Integer.parseInt(s); 를 넣어주는 방법도 생각해볼 수 있다.

Solution.java

class Solution {
    public boolean solution(int x) {
        int su=x;
		int sum=0;
		int[] arr = new int[5];
		for(int i=4; i>=0; i--) {
			arr[i]=su%10;
			su=su/10;
			sum+=arr[i];
		}
		return (x%sum==0?true:false);
    }
}

 

'Algorithm > [Solve]Programmers' 카테고리의 다른 글

[Lv1/Java]IntegerSquareRoot  (0) 2022.07.27
[Lv1/Java]Collatz  (0) 2022.05.24
[Lv1/Java]행렬의 덧셈  (0) 2022.05.19
[Lv1/Java]x만큼 간격이 있는 n개의 숫자  (0) 2022.05.17