프로그래머스 : 하샤드 수

Digeut·2023년 7월 6일
0

프로그래머스

목록 보기
78/164

❔문제설명

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

⚠️제한사항

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

🤔아이디어

자릿수를 구하는 코드를 가져와서 그대로 그 값을 배열에 넣은다음 그 배열의 합이 x로 나눴을때 나머지가 0이되면 하샤드수인게 아닐까

❌틀린코드

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int[] num = new int[x];
        
        for(int i = 1 ; i <= x ; i++){
            while(x > 0){
            num[i] += (x % 10);
            x /= 10;
            }
        }
        
        int sum = 0;
        
        for(int j = 0 ; j < num.length ; j++){
            sum += num[j];
        }
        
        if(x % sum == 0 ){
            answer = true;
        } else {
            answer = false;
        }
        
        return answer;
    }
}

🙄오류

다 값이 true로 실행되고 있다...

 int[] num = new int[x];

이 부분이 설정이 잘못됐다 만약 '123'이면 배열의 크기는 3이 되어야하는데 내가 설정한 대로면 123의 크기의 배열을 가지게된다...

for(int i = 1 ; i <= x ; i++){
            while(x > 0){
            num[i] += (x % 10);
            x /= 10;
            }
        }

이 부분때문에 내가 기존의 x값을 건드리게 된다.
그래서 이후의 계산인

if(x % sum == 0 ){
            answer = true;
        } else {
            answer = false;
        }

이 부분에서 바뀌어버린 x를 이용하게 된다..!!!

❌틀린코드

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int[] num = new int[Integer.toString(x).length()];
        
        int orgX = x;
        
        for(int i = 1 ; i <= x ; i++){
            while(x > 0){
            num[i] += (x % 10);
            x /= 10;
            }
        }
        
        int sum = 0;
        
        for(int j = 0 ; j < num.length ; j++){
            sum += num[j];
        }
        
        if(orgX % sum == 0 ){
            answer = true;
        } else {
            answer = false;
        }
        
        return answer;
    }
}

🙄오류2


어째서.. 왜지..?

💡코드풀이

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int[] num = new int[Integer.toString(x).length()];
        
        int orgX = x;
        
        for(int i = 0 ; i <= x ; i++){
            while(x > 0){
            num[i] += (x % 10);
            x /= 10;
            }
        }
        
        int sum = 0;
        
        for(int j = 0 ; j < num.length ; j++){
            sum += num[j];
        }
        
        if(orgX % sum == 0 ){
            answer = true;
        } else {
            answer = false;
        }
        
        return answer;
    }
}

이 부분의 i시작값을 수정했더니 성공!

for(int i = 0 ; i <= x ; i++){
profile
개발자가 될 거야!

0개의 댓글