하샤드 수(harshad number)
주어진 진법에서 그 수의 각 자릿수 숫자의 합으로 나누어떨어지는 자연수
예를 들어 12는 각 자릿수 숫자의 합이 1+2=3이고, 12가 3으로 나누어떨어지므로 12는 10진법에서 하샤드 수다.
그러나 16은 1+6=7이고, 16이 7로 나누어떨어지지 않으므로 16은 10진법에서 하샤드 수가 아니다.
class Solution {
public boolean solution(int x) {
int sum = 0;
int num = x;
while(num > 0){
sum += num % 10;
num /= 10;
}
if(x % sum == 0){
return true;
} else{
return false;
}
}
}
int num = x;로 선언한이유
while문에서 x 값을 그대로 넣으면
x값이 계속해서 변경되기 때문에 마지막 if 문에 sum값과 x를 활용하지 못한다.
int x = 123일경우
while( num > 0 ) num이 0보다 클경우 계속 while문을 돈다.
첫번째 while문
sum = 123 % 10 = 3
sum = 3
num /= 10 = 12
num = 12 이므로 0보다 크므로 while문 으로 다시 돌아간다.
두번째 while문
num(12) % 10 = 2
sum = 3 + 2 = 5
num /= 10 = 1
num = 1 이므로 0보다 크므로 while문 한바퀴 더 돈다.
.
세번째 while문
num(1) % 10 = 1
sum = 3 + 2 + 1 = 6
num /= 10 = 0
num = 0 이므로 while문 탈출
sum = 6 된다.
즉, sum = 각 자리수 의 합
x를 sum에 나누고 나머지가 0이면 true 를 반환하고,
아닐경우 false를 반환한다.
'코드 알고리즘' 카테고리의 다른 글
<코드카타> - 내적구하기 (0) | 2024.08.20 |
---|---|
<코드카타> - 핸드폰 번호 가리기 (0) | 2024.08.16 |
<코드카타> - 없는 숫자 더하기 (0) | 2024.08.16 |
<코드카타> 문자열을 정수로 바꾸기 - 여러가지 형변환 메서드 (0) | 2024.08.07 |