Hayden's Archive

[알고리즘] 프로그래머스 : 하샤드 수 본문

Algorithm

[알고리즘] 프로그래머스 : 하샤드 수

_hayden 2020. 5. 16. 10:49

알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12947

 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하�

programmers.co.kr

 


내가 작성한 코드

각 자리수 * 10^n을 계속해서 뺄 것이므로 이 값을 임시로 담을 xTemp라는 변수가 필요했다. 10^n으로 나눈 몫은 quotient에 담았고 이 몫들을 합한 값들은 qTotal에 담았다.(qTotal이 모든 자릿수의 합이 된다) 그 뒤 x로 qTotal를 나누었을 때 나누어 떨어지면 answer에 true 값을 저장했는데 0으로 나누면 안 되므로 && 연산자를 써서 qTotal이 0이 아닌 조건도 추가했다.

class Solution {
    public boolean solution(int x) {
        boolean answer = false;
        int xTemp = x;
        int quotient = 0;
        int qTotal = 0;
        for(int i = Integer.toString(x).length()-1; i>=0; i--){
            quotient = (int) (xTemp / Math.pow(10, i));
            qTotal += quotient;
            xTemp -= quotient * Math.pow(10, i);
        }
        if(qTotal !=0 && x % qTotal == 0){
            answer = true;
        }
        return answer;
    }
}

 

다른 사람의 코드

String 클래스의 split() 메소드에 ""을 인자값을 넣어 잘라서 향상된 for문을 돌려 합하는 것으로 모든 자릿수의 합을 구할 수도 있겠다.

String[] temp = String.valueOf(x).split("");
int sum = 0;
for (String s : temp) {
    sum += Integer.parseInt(s);
}