Java/알고리즘

하샤드 수

티코딩 2024. 1. 5. 09:54

일단 내가 푼 방법은 아래와 같다.

public boolean solution(int x) {
        boolean answer = false;
        //x를 각 자리수별로 split 하기 위해 String으로 변환
        String xToStr = String.valueOf(x);
        //변환한 x를 각자리수별 split
        String[] xStr = xToStr.split("");
        //다시 int형으로 넣을배열하나 생성
        int[] xInt = new int[xStr.length];
        //int형배열에 집어넣기
        for(int i = 0; i < xStr.length; i++){
            xInt[i] = Integer.parseInt(xStr[i]);
        }
        //각자리수의 합 초기화
        int sum = 0;
        //각자리수의합 집어넣기
        for(int a : xInt){
            sum += a;
        }
        //조건달성하면 true, 아니면 false
        if(x % sum == 0){
            answer = true;
        }
        return answer;
    }

1. split하기 위해 String으로 형변환해서 배열에 넣기

2. 다시 int 형으로 바꿔 배열에 넣기

3. 각자리수의 합 구하기

4. 조건달성여부 확인하기

 

이렇게 풀었는데 너무 비효율적인거같다. int형의 각 자리수를 더하는 다른 방법이 있지않을까? 다른 풀이를 한번 보자.

public boolean solution(int x) {
        int originalX = x; // 원래의 x 값을 저장해둠
        int sum = 0;

        while (x > 0) {
            sum += x % 10; // 현재 자릿수를 더함
            x /= 10; // 다음 자릿수로 이동
        }

        return originalX % sum == 0;
    }

x/=10으로 다음 자리수로 이동하는거에 이마를 탁 쳤다.

이생각을 못하다니..

그리고 return을 저런식으로 하면 되는걸 굳이 answer = true; 이렇게 했다. 내가 너무 초보같이 풀었다.

이 풀이를 잘 기억해두자.