Java Hashad Number

박상우·2022년 8월 11일
post-thumbnail

하샤드 수

하샤드 수(Harshad Number)
'하샤드 수'란 어떠한 자연수에 대해 각 자리 수의 합으로 주어진 수를 나누었을때 나누어 떨어지는 것을 의미한다.
가령, 숫자 18은 각 자리수의 합이 9이고(1+8), 이합으로 18을 나누면 나누어 떨어짐으로 하샤드 수입니다.
숫자 124는 각 자리수의 합이 7이고, 이합으로 124를 나누어 떨어지게 할 수 없으므로 하샤드 수가 아닙니다.

문제

  1. 1이상, 10000이하의 자연수에 대해 이 수가 하샤드 수인지의 여부를 반환하는 메서드 isHarshad를 완성하시오.
  2. main Method에 1부터 10000까지의 수 중 하샤드 수가 총 몇개 인지를 출력하시오.

  • 직면한 문제 1.
    isHarshad 메서드의 타입은 boolean인데 받는 매개변수의 타입은 정수형이였다.

  • 직면한 문제 2.
    정수를 문자로 쪼개어서 그 쪼개어진 문자 하나하나를 정수로 바꾼뒤 더한 값을 출력해야한다.

  • 직면한 문제 3.
    각 자리의 수를 더한값을 원래 정수로 나누었을때 나누어떨어지는지에 대한 여부를 반환해야한다.

풀이법

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

결과

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

profile
백엔드 개발자가 되기 위한 여정

0개의 댓글