양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
x는 1 이상, 10000 이하인 정수입니다.
자릿수를 구하는 코드를 가져와서 그대로 그 값을 배열에 넣은다음 그 배열의 합이 x로 나눴을때 나머지가 0이되면 하샤드수인게 아닐까
class Solution {
public boolean solution(int x) {
boolean answer = true;
int[] num = new int[x];
for(int i = 1 ; i <= x ; i++){
while(x > 0){
num[i] += (x % 10);
x /= 10;
}
}
int sum = 0;
for(int j = 0 ; j < num.length ; j++){
sum += num[j];
}
if(x % sum == 0 ){
answer = true;
} else {
answer = false;
}
return answer;
}
}
다 값이 true로 실행되고 있다...
int[] num = new int[x];
이 부분이 설정이 잘못됐다 만약 '123'이면 배열의 크기는 3이 되어야하는데 내가 설정한 대로면 123의 크기의 배열을 가지게된다...
for(int i = 1 ; i <= x ; i++){
while(x > 0){
num[i] += (x % 10);
x /= 10;
}
}
이 부분때문에 내가 기존의 x값을 건드리게 된다.
그래서 이후의 계산인
if(x % sum == 0 ){
answer = true;
} else {
answer = false;
}
이 부분에서 바뀌어버린 x를 이용하게 된다..!!!
class Solution {
public boolean solution(int x) {
boolean answer = true;
int[] num = new int[Integer.toString(x).length()];
int orgX = x;
for(int i = 1 ; i <= x ; i++){
while(x > 0){
num[i] += (x % 10);
x /= 10;
}
}
int sum = 0;
for(int j = 0 ; j < num.length ; j++){
sum += num[j];
}
if(orgX % sum == 0 ){
answer = true;
} else {
answer = false;
}
return answer;
}
}
어째서.. 왜지..?
class Solution {
public boolean solution(int x) {
boolean answer = true;
int[] num = new int[Integer.toString(x).length()];
int orgX = x;
for(int i = 0 ; i <= x ; i++){
while(x > 0){
num[i] += (x % 10);
x /= 10;
}
}
int sum = 0;
for(int j = 0 ; j < num.length ; j++){
sum += num[j];
}
if(orgX % sum == 0 ){
answer = true;
} else {
answer = false;
}
return answer;
}
}
이 부분의 i시작값을 수정했더니 성공!
for(int i = 0 ; i <= x ; i++){