728x90
- 문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. - 제한 조건
x는 1 이상, 10000 이하인 정수입니다. - 입출력 예
x return
10 true
12 true
11 false
13 false - 입출력 예 설명
입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
class Solution {
public boolean solution(int x) {
int num = x;
int sum = 0;
while(x > 0) {
sum += x % 10;
x /= 10;
}
return num % sum == 0 ? true : false;
}
}
- 문제풀이
1) x를 10으로 나눈 몫들을 더해서 각 자릿수의 합을 구한다.
> 그 후 x 값을 10으로 나눠서 자릿수를 하나씩 내려간다.
2) 그렇게 구해진 각 자릿수의 합 sum를 기존의 x와 나눈다.
3) 나머지가 0일 경우 true, 아닐 경우 false로 return하도록 했다.
**int num = x; 를 따로 두지 않고 return 문에 x % sum 으로 시도하니 계속 오류가 났음.
> 당연함. x는 이미 위에서 난도질 당한 x가 내려오기 때문에 초기값을 가져오려면 변수에 담아줘야 함
#다른 사람 풀이
public class HarshadNumber{
public boolean isHarshad(int num){
String [] tmp = String.valueOf(num).split("");
int sum=0;
for(String s:tmp) {
sum+=Integer.parseInt(s);
}
if(num%sum==0) {
return true;
} else {
return false;
}
}
}
- 임시저장 배열 tmp를 생성해서 String.valueOf(num).split("")을 사용해서 숫자를 하나씩 끊어서 담는다.
- 향상된 for문을 사용
tmp 배열의 요소를 순회하며 sum에 하나씩 더한다.
향상된 for문 사용에 익숙해지자!
728x90
'💻Programmers' 카테고리의 다른 글
[프로그래머스 / LV1] 핸드폰 번호 가리기(JAVA) (0) | 2023.10.04 |
---|---|
[프로그래머스 / LV1] 부족한 금액 계산하기(JAVA) (1) | 2023.10.03 |
[프로그래머스 / LV1] 나머지가 1이 되는 수 찾기(JAVA) (0) | 2023.10.03 |
[프로그래머스 / LV1] 콜라츠 추측(JAVA) (0) | 2023.10.01 |
[프로그래머스 / LV1] 자릿수 더하기(JAVA) (0) | 2023.10.01 |