본문 바로가기

Plo Algorithm

프로그래머스 Lv1 하샤드 수

하샤드 수

기존 풀이

class Solution {
    public boolean solution(int x) {
        boolean answer = true;
            String typeStr = String.valueOf(x);
            String[] strArr = typeStr.split("");
            int share = 0;
            //파라미터를 나눈 arr의 각 객체를 다른 객체에 넣어줘야함
            for (int i = 0 ; i < strArr.length ; i++){
                share += Integer.parseInt(strArr[i]);
            }
            if(x % share == 0){
                answer = true;
            }else{
                answer = false;
            }
            return answer;
    }
}

뜯어보기

public class Solution{
        private int sum = 0;
        public boolean solution(int num){
            sum = 0;
            Integer.toString(num).chars().forEach(c -> sum += c - '0');
            return num % sum == 0;
        }
    }

앞의 복습수련을 통해서

이해할 수 있는 코드가 많아졌다.

입력받은 num의 각 자리 수를 더해주기 위해

- Integer.toString(num) -

StringType으로 변환해준후 .chars()로 intstream을 실행했다.

- forEach(c -> sum+= c - '0') -

forEach문을 통해 sum에 값들을 더하면서 할당해준다.

- (c - '0') -

char를 int로 변환하려면 -'0'을 빼버리면 된다.

문자'0'은 ASCII CODE에 48

char '0'을 그대로 int에 할당하게 되면 암시적 유형 캐스트 (자동 형변환)되어

int type ASCII CODE값인 48이 할당된다.

반대로 char - '0'은

int type에 char Type Data가 할당될 때 자동 형변환 되는 부분까지 생각해

미리 -48해준 값을 할당하는 것이다.

이거 진짜 한참 찾았다...