▶ 문제
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
★ 풀이방식
먼저 하샤드 수가 뭔지 몰라서 인터넷 검색을 해봤다. 조금 복잡하다...
공식은 첫 번째로 x의 각 자릿수를 구한다. 이 부분은 String Array를 만들어서 split 하여
for문을 이용해 num 변수에 하나씩 분리했다. 이때 Array나 배열에 특화된
향상된 for문을 활용하여 분리했다. 그 후에 x의 각 자릿수를 더한 값을 구한 다음에
x를 그 구한 값으로 나눠서 나눠지면 true, 아니라면 false를 반환하는 것이다.
▶ 소스코드
class Solution {
public boolean solution(int x) {
boolean answer = true;
String[] Arr = String(x.split(""));
int sum = 0;
for(String num : Arr){
sum += Integer.parseInt(num);
}
if(x % sum == 0) {
answer = true;
} else {
answer = false;
}
return answer;
}
}
- 실행 시 String Array에서 오류가난다. 아무래도 String 변수에 먼저 담지않고 한번에 처리하려 했으나 안되는거같다. 먼저 String 변수에 담은 후에 Array에 옮겨야 될거같다.
▶ 수정된 소스코드
class Solution {
public boolean solution(int x) {
boolean answer = true;
String str = String.valueOf(x);
String[] Arr = str.split("");
int sum = 0;
for(String num : Arr){
sum += Integer.parseInt(num);
}
if(x % sum == 0) {
answer = true;
} else {
answer = false;
}
return answer;
}
}
- String 변수에 먼저 담은 후에 split을 진행하니 오류없이 잘 진행되는 모습이다. 이걸 통해 String Array에는 String 변수에 먼저 담은 후에 사용해야 된다는걸 깨달았다.