본문 바로가기
Java/알고리즘

하샤드 수

by 티코딩 2024. 1. 5.

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

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; 이렇게 했다. 내가 너무 초보같이 풀었다.

이 풀이를 잘 기억해두자.

'Java > 알고리즘' 카테고리의 다른 글

콜라츠 추측  (0) 2024.01.09
두 정수 사이의 합  (1) 2024.01.08
정수 내림차순으로 배치하기  (1) 2024.01.04
뒤에 있는 큰 수 찾기  (0) 2023.11.22
주식 가격  (1) 2023.11.21