[Programmers][Level1] 하샤드 수

울부짖는 늑대·2023년 7월 5일

문제 설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 사항

  • x는 1 이상, 10000 이하인 정수입니다.

입출력 예

xreturn
10true
12true
11false
13false

입출력 예 설명

입출력 예 #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) {
        boolean answer = true;
        int temp = x;
        int remain = 0;
        while (x >= 1) {
            remain += x % 10;
            x = x / 10;
        }
        return answer = temp % remain == 0 ? true : false;
    }
}

풀이 방법

  • 문제는 말 그대로 입력한 수 x가 하샤드 수이면 true, 아니면 false를 리턴하면 되는 문제이다.
  • 이 문제에서 관건은 자릿수를 빼서 합을 구해야 되는 부분이다.
  • x를 10으로 나눈 나머지는 일의자리 수 이므로 remain이라는 변수에 누적합을 해준다.
  • 그리고 x를 10으로 나눈 몫으로 x의 값을 계속 변경해준다.
  • x가 0이면 while문을 탈출한다. 입력받은 수를 담아둔 temp를 remain으로 나누어 나머지가 0이면 하샤드 수이므로 true, 아니면 false를 리턴한다.

다른 풀이

class Solution {
    public boolean solution(int x) {
        int sum = String.valueOf(x).chars().map(ch -> ch - '0').sum();
        return x % sum == 0;
    }
}

풀이 방법

  • java String 클래스의 함수와 스트림을 활용한 풀이다.
  • 입력받은 수 x를 문자열로 형변환 해서 chars().map()으로 숫자를 한개씩 쪼개 순차적으로 누적합 연산을 해 코드를 간결하게 작성했다.
  • 이런 풀이를 보면서 배워야 할 점이 많아 보인다.
  • java 8 버전 이상을 쓰고 있는 개발자라면 Stream을 잘 활용하는 것도 많은 도움이 될 것이다.
profile
이상을 현실로 구현하는 개발자

0개의 댓글