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에다 나눠 나머지가 없으면 하샤드수이고 나머지가 있으면 하샤드 수가 아니게 된다.
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;
}
}
String a=Integer.toString(x);
String [] str=a.split("");
처음에는 위와같이 정수를 문자열로 변환하고 자르는데 2줄의 코드를 썻는데 매우 효율성이 떨어져 이 코드를 한줄로 변환하여 다시 코드를 짜게 되었으며 이과정에서 valueOf와 toString의 차이를 알게되었다.
둘다 문자열로 변환 할수는 있으나 valueOf는 null 반환, toString은 예외를 발생시킨다.
또한 다시 정수형으로 변환시킬때에는 valueOf가 아닌 parseInt를 사용하였는데 왜냐하면 parseInt를 원시자료형(Int..)를 반환시키는데 반해 valueOf는 Wrapper타입의 객체형태를 반환시키기 때문이다.