문제 설명
양의 정수 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 |