알고리즘/Programmers

[프로그래머스] Java Level 1. 하샤드 수

개발자 정지은 2023. 5. 25. 13:11

풀이법

 

틀린 코드

import java.util.*;

class Solution {
    public boolean solution(int x) {
        //각 자리수를 나누어 더하기
        //더한 수로 x를 나누기
        
        boolean answer = false;
        
        //각 자리수를 나누어 더한 합
        int sum = 0;
        //x값 잠시 가져다 쓸 변수
        int temp = x;
        //자리수를 나누어 저장해 줄 리스트
        List<Integer> list = new ArrayList<>();
        
        while(x != 0) {
            list.add(temp%10);
            temp = temp / 10;
        }
        
        for(int i=0; i<list.size(); i++) {
            sum += list.get(i);
        }
        
        if(x % sum == 0) {
            answer = true;
        }
        
        
        return answer;
    }
}

메모리 초과가 떴다.

너무 비효율적인 코드인거 같아서 효율적인 방법을 고민해보았다.

불필요한 반복 코드는 줄이고 간단하게 수정했다.

 

정답 코드

import java.util.*;

class Solution {
    public boolean solution(int x) {
        //각 자리수를 나누어 더하기
        //더한 수로 x를 나누기
        
        //각 자리수를 나누어 더한 합
        int sum = 0;
        //x값 잠시 가져다 쓸 변수
        int temp = x;

        
        while(temp != 0) {
            sum += temp % 10;
            temp = temp / 10;
        }

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

굳이 List에 추가해서 for문을 돌리는건 불필요했다.

간단하게 생각해서 코드를 변경하니 바로 통과되었다.