[프로그래머스]하샤드 수

ByWindow·2020년 10월 3일
0

Algorithm

목록 보기
2/104
post-thumbnail

1.문제

프로그래머스에서 제공되는 Level1문제 중 하샤드 수이다.

문제 설명

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

제한 조건

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

입출력 예

  • arr=10 --> return == true
  • arr=12 --> return == true
  • arr=11 --> return == false
  • arr=13 --> return == false

2. 아이디어

문제를 처음 봤을 때 좋은 아이디어 떠오르지 않았다. 그래서 x가 10000이하라는 제한 조건을 이용해서 if문을 통해 x의 범위에 찾고 x의 각 자릿수를 구해 그 합을 x로 나눴을 때 나머지를 구했다.

3. 코드

import java.util.Scanner;

public class hashad {
    public boolean hashadAnswer(int x) {
        boolean answer = true;

        //x는 10000이하인 수이므로 각 자릿수를 나타내는 변수가 적어도 4개는 필요하다
        int i, j = 0;
        int z, y, sum = 0;
        //x가 한 자리 수일 때
        if (x >= 1 && x <= 10) {
            answer = true;
        }
        //x가 두 자리 수일 때
        else if (x >= 11 && x <= 99) {
            i = x / 10;
            j = x % 10;
            sum = i + j;
            if (x % sum == 0) {
                answer = true;
            } else
                answer = false;
        }
        //x가 세 자리 수일 때 
        else if (x >= 100 && x <= 999) {
            i = x / 100;
            j = (x % 100) / 10;
            z = (x % 100) % 10;
            sum = i + j + z;
            if (x % sum == 0) {
                answer = true;
            } else
                answer = false;
        } 
        //x가 네 자리 수일 때
        else if (x >= 1000 && x <= 10000) {
            i = x / 1000;
            j = (x % 1000) / 100;
            z = ((x % 1000) % 100) / 10;
            y = ((x % 1000) % 100) % 10;
            sum = i + j + z + y;
            if (x % sum == 0) {
                answer = true;
            } else
                answer = false;
        } else {
            System.out.println("1이상 10000이하인 정수를 입력해주시기 바랍니다.");
            answer = false;
        }
        return answer;
    }

    public static void main(String[] args) {
        while (true) {
            hashad h = new hashad();
            Scanner stdin = new Scanner(System.in);
            int arr = stdin.nextInt();
            System.out.println(h.hashadAnswer(arr));
            if(arr == 0) break;
        }
    }
}

코드를 보면 딱 봐도 엄청 더럽다... 그래서 다른 분들은 이 문제를 어떻게 풀었는지 살펴보았는데 정말 감탄할만한 아이디어로 푼 분이 계셔서 그 분의 코드를 첨부한다.

import java.util.Scanner;

public class hashad_other {
    public boolean isHarshad(int num) {

        String[] temp = String.valueOf(num).split("");

        int sum = 0;
        for (String s : temp) {
            sum += Integer.parseInt(s);
        }
        if (sum > 0) {
            if (num % sum == 0) {
                return true;
            } else {
                return false;
            }

        } else
            return false;
    }

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        hashad_other sn = new hashad_other();
        Scanner stdin = new Scanner(System.in);
        int arr = stdin.nextInt();
        System.out.println(sn.isHarshad(arr));
    }
}

split("")로 x의 각 자릿수 값을 구하는 방법이다.
Integer형인 x를 String형으로 바꾸고 split함수로 쪼갠다.
split함수의 사용법에 관한 글을 첨부한다 참고
그 다음, Integer.parseInt()로 String형을 Integer로 형 변환 시켜준다.
parseInt의 사용법이다. 참고

4. end..

아직 형변환과 Java에서 제공하는 기본 라이브러리, 함수들에 익숙하지 않다ㅜㅜ
이래서는 내 주언어가 Java라고 어디가서 말도 못할 듯..
당분간은 쉬운 문제 위주로 풀어가면서 이렇게 기본적인 것들을 먼저 익혀야겠다.

profile
step by step...my devlog

0개의 댓글