Harshad(나누어 떨어지는 수)

배지원·2022년 11월 9일
0

알고리즘

목록 보기
13/16

프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12947

1. 문제

Harshad(하샤드) 구분하기

  • a,b 2개의 정수값이 있고 a % b를 했을때 나머지가 0일경우 하샤드 수라고 한다.

2. 문제분석

  1. 정수를 입력받음
  2. 입력받은 수의 자릿값들을 더함(1의자리, 10의자리, 100의자리...)
  3. 입력받은 수를 자릿값들의 합으로 나눔

🚫 제한조건 1. x는 1 이상, 10000 이하인 정수입니다.

3. 설계

(1) int로 값을 받아 계산하는 방식

① 입력받은 정수의 자릿수마다 값을 더함

<int sumOfDigit = 0;         // 자릿수 합
   while(x>0){
      sumOfDigit += x%10;
      x = x/10;
   }

② 입력받은 수를 자릿값들의 합으로 나누어 하샤드를 판별함

if(num%sumOfDigit == 0){
    return true;
  }

(2) String으로 값을 바꿔 계산하는 방식

① 입력받은 정수를 String으로 자릿수의 값을 한자리씩 구분함

String[] num = String.valueOf(x).split(""); // 입력받은 숫자를 문자열 배열 한자리씩 나눔

② 구분한 값들을 int로 바꿔 더해줌

int sum = 0;
for(String s : num){        // 문자열 배열에 저장된 자릿수의 값들을 한개씩 뽑아 모두 더함
   sum += Integer.parseInt(s);
}

③ 입력받은 수를 자릿값들의 합으로 나누어 하샤드를 판별함

if(x%sum == 0){
   return true;
}

4. CODE

(1) int로 값을 받아 계산하는 방식

public class Harshad {
    // int로 값을 받아 계산하는 방식
    public boolean solution(int x){

        int num = x;
        // 자리수 합
        int sumOfDigit = 0;         // 자릿수 합
        while(x>0){
            sumOfDigit += x%10;
            x = x/10;
        }

        if(num%sumOfDigit == 0){
            return true;
        }

        return false;
    }

    public static void main(String[] args) {
        Harshad hs = new Harshad();
        System.out.println(hs.solution(10));
        System.out.println(hs.solution(11));
    }
}

(2) String으로 값을 바꿔 계산하는 방식

public class Harshad {
    //String으로 값을 받아 계산하는 방식
    public boolean solution2(int x){
        String[] num = String.valueOf(x).split(""); // 입력받은 숫자를 문자열 배열 한자리씩 나눔

        int sum = 0;
        for(String s : num){        // 문자열 배열에 저장된 자릿수의 값들을 한개씩 뽑아 모두 더함
            sum += Integer.parseInt(s);
        }

        if(x%sum == 0){
            return true;
        }

        return false;
    }

    public static void main(String[] args) {
        Harshad hs = new Harshad();
        System.out.println(hs.solution2(10));
        System.out.println(hs.solution2(11));
    }
}
profile
Web Developer

0개의 댓글