하샤드수
x양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요.
예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.
숫자를 문자열로 바꾸어준 후 split해주었다. 각 자릿수를 더해서 수가 나누어지는지 판단했다.
나처럼할 필요 없이 그냥 sum을 0으로 초기화한 뒤에 10으로 나눈 나머지를 더해주고, 100으로 나눈 나머지를 더해주고, 1000, 10000, ... 을 나누는 식으로 반복문을 구성해도 된다. 굳이 과정을 나누고싶다면 나머지들을 배열에 저장해준 뒤에 총합을 구해주어도 된다.
나는 그냥 반복문을 10씩 늘리는 식으로 해주거나 1부터 얼마까지하고 1일땐 10 2일땐 100을 나누어주는 식으로 처리해주기가 예쁘지않고 싫었기 때문에 문자열로 바꾸어서 한글자씩 잘라 다시 숫자형으로 바꾸어 더해주는 방식으로 처리했다.
x
public class HarshadNumber {
public boolean isHarshad(int num) {
String[] input = Integer.toString(num).split("");
int sum = 0;
for (int i = 0; i < input.length; i++) {
sum += Integer.parseInt(input[i]);
}
/*System.out.println(sum);*/
return num % sum == 0;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
HarshadNumber sn = new HarshadNumber();
System.out.println(sn.isHarshad(18));
}
}
'공부 > algorithm' 카테고리의 다른 글
[programmers] 시저 암호 (0) | 2018.05.22 |
---|---|
[programmers] 소수 찾기 (0) | 2018.05.22 |
[programmers] 최솟값 만들기 (0) | 2018.05.22 |
[programmers] 2016년 (0) | 2018.05.22 |
[programmers] 행렬의 곱셈 (0) | 2018.05.22 |
댓글