[프로그래머스] 하샤드 수 (JAVA)

yoontaeng·2022년 1월 10일
0
post-thumbnail

📎 문제링크

https://programmers.co.kr/learn/courses/30/lessons/12947

📄 문제설명

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

제한조건

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

📝 문제풀이

양의정수x를 문자열로 변환후 그것을 한 글자씩 잘라서 str배열에 집어넣는다. 그 이후 str배열을 반복문으로 돌려서 parseInt로 바로 정수형으로 바꿔 더해준 값을 이용하여 x에다 나눠 나머지가 없으면 하샤드수이고 나머지가 있으면 하샤드 수가 아니게 된다.

💡 Code

class Solution {
    public boolean solution(int x) {
        
        boolean answer = true;
        int sum=0;

        String[] str=String.valueOf(x).split("");
         
        for(String j:str){     
            sum+=Integer.parseInt(j);               
            }  
       
       if(x%sum==0) answer=true;      
        
       else answer=false;    
        
       return answer;
    }
}

👍 Comment

String a=Integer.toString(x);  
String [] str=a.split("");

처음에는 위와같이 정수를 문자열로 변환하고 자르는데 2줄의 코드를 썻는데 매우 효율성이 떨어져 이 코드를 한줄로 변환하여 다시 코드를 짜게 되었으며 이과정에서 valueOf와 toString의 차이를 알게되었다.
둘다 문자열로 변환 할수는 있으나 valueOf는 null 반환, toString은 예외를 발생시킨다.
또한 다시 정수형으로 변환시킬때에는 valueOf가 아닌 parseInt를 사용하였는데 왜냐하면 parseInt를 원시자료형(Int..)를 반환시키는데 반해 valueOf는 Wrapper타입의 객체형태를 반환시키기 때문이다.

profile
병아리개발자

0개의 댓글