하샤드 수
하샤드 수(Harshad Number)
'하샤드 수'란 어떠한 자연수에 대해 각 자리 수의 합으로 주어진 수를 나누었을때 나누어 떨어지는 것을 의미한다.
가령, 숫자 18은 각 자리수의 합이 9이고(1+8), 이합으로 18을 나누면 나누어 떨어짐으로 하샤드 수입니다.
숫자 124는 각 자리수의 합이 7이고, 이합으로 124를 나누어 떨어지게 할 수 없으므로 하샤드 수가 아닙니다.
문제
- 1이상, 10000이하의 자연수에 대해 이 수가 하샤드 수인지의 여부를 반환하는 메서드 isHarshad를 완성하시오.
- main Method에 1부터 10000까지의 수 중 하샤드 수가 총 몇개 인지를 출력하시오.

-
직면한 문제 1.
isHarshad 메서드의 타입은 boolean인데 받는 매개변수의 타입은 정수형이였다.
-
직면한 문제 2.
정수를 문자로 쪼개어서 그 쪼개어진 문자 하나하나를 정수로 바꾼뒤 더한 값을 출력해야한다.
-
직면한 문제 3.
각 자리의 수를 더한값을 원래 정수로 나누었을때 나누어떨어지는지에 대한 여부를 반환해야한다.
풀이법
- String 타입의 number변수를 만든뒤 number에 받는 매개변수 num을 String.valueOf 메서드를 통해 String타입으로 변환 시켰다.
- 조건 1이상 10000이하의 자연수를 충족 시키기 위해 if조건문을 작성 하였다.
- for문을 사용해 위에서 지정한 number변수의 길이 만큼을 반복시켜줌으로써 유동적인 구문이 생성되었다.
- String관련 메서드 중 charAt()메서드를 통해 문자열의 인덱스 번호를 부여하고 그 인덱스 번호에 맞는 문자를 담는 빈 문자 char sum을 생성하였다.
- 여기서 부터가 조금 어려웠다. 각 문자를 담는 sum을 각각 따로 더해 주어야 했기 때문에 이 문자를 정수로 치환시켜야한다.
- 정수형 타입의 value라는 변수를 지정하고 그 변수에는 sum에서 받는 문자(char)를 정수로 치환시켜주는 Character 클래스 메서드(getNumericValue)를 사용하였다.
- every라는 변수를 지정하여 every에 value들의 총 더해진 값을 대입한다. 이것이 가능한 이유는 every 변수의 초기값 선언을 0으로 했기 때문에 0에서 value들이 더해지게 된다.
- for문 밖에서 num과 every의 나머지값이 0이 될경우(true)만 return을 해주고 결국 전체 문장에서 result를 반환해 줌으로써 조건에 부합할 경우는 true를 아닐경우는 false를 반환해주게 된다.
- 총 개수는 main method에서 구해야 했기 때문에 main메서드에서 수를 세는 count변수를 지정, 그후 for문을 1에서 10000까지 돌리고 그 값에서 하샤드 수인것들만 count가 증감이 된다
결과

느낀점 : 이 문제를 풀면서 문자열과 문자 그리고 정수형의 관계에 대해서 조금더 알게 되었고 특히 이런저런 String과 char의 메서드들에 대해서 공부를 하게 되었다. char관련 메서드도 엄청 많다는 것을 알게 되었다.