본문으로 바로가기

📘문제 설명

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

https://school.programmers.co.kr/learn/courses/30/lessons/12947

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📌 제한조건

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

💡 개념 설명

정수 x가 주어질 때, x가 각 자리 숫자의 합으로 나누어지는지 (즉, x % 자리수 합 == 0) 확인하는 문제입니다.


1. 변수 초기화

  • b를 0으로 초기화하여 각 자리 숫자의 합을 저장할 변수로 사용합니다.
  • i에 x 값을 복사하여 원래 값은 유지하면서 자리수를 하나씩 분리할 준비를 합니다.

2. 각 자리 숫자 분리 및 합산

  • while 반복문을 이용해 i가 0보다 클 때까지 반복합니다.
  • i % 10으로 마지막 자리 숫자를 구해 b에 더합니다.
  • i = i / 10으로 마지막 자리 숫자를 제거하여 다음 자리 숫자를 처리합니다.

3. 나누어 떨어지는지 확인

  • 반복문 종료 후, b에는 x의 각 자리 숫자들의 합이 저장되어 있습니다.
  • x % b == 0 조건을 검사하여 x가 b로 나누어 떨어지면 true, 아니면 false를 반환합니다.

4. 결과 반환

  • 조건에 맞게 true 또는 false 값을 반환해 문제의 답을 제공합니다.

📎 입출력 예시


📎 코드

class Solution {
    public boolean solution(int x) {
        int b = 0;
        int i = x;
        while (i > 0) {
            b += i % 10;
            i = i / 10;
        }
        return x % b == 0;
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println("10 : " + s.solution(10));
        System.out.println("12 : " + s.solution(12));
        System.out.println("11 : " + s.solution(11));
        System.out.println("13 : " + s.solution(13));
    }
}

 


📎 결과