import java.util.*;
class Solution {
public boolean solution(int x) {
boolean answer = true;
int[] xArr = String.valueOf(x).chars().toArray();
int xSum = Arrays.stream(xArr).sum();
if(x%xSum != 0) {
answer = false;
}
return answer;
}
}
처음에 이것으로 제출했을 때 모두 false가 되었다.
왜 그런지 출력해서 확인해봤는데, 10을 입력했을 때 xArr이 뜬금없이 97이 되는 것이다.
고민해보니 chars()이후 toArray()에서 int로 변환이 되는데, 아스키 코드로 대응되기 때문이다.
'1'과 '0'의 아스키 코드 값이 각각 49와 48이니, 이것을 합쳐서 97이 되었던 것이다.
그렇다면 stream으로 계속 풀이하기엔 너무 복잡해 질 것 같았다.
( 이 때 - '0' 하면 되었는데..!! -> 다른 사람 풀이에 계속)
String을 split으로 나누어서 풀이해야겠다고 생각했다.
import java.util.*;
class Solution {
public boolean solution(int x) {
boolean answer = true;
String[] xStrArr = String.valueOf(x).split("");
int sum = 0;
for(String a : xStrArr) {
sum+=Integer.parseInt(a);
}
if(x%sum != 0) {
answer = false;
}
return answer;
}
}
class Solution {
public boolean solution(int x) {
int sum = String.valueOf(x).chars().map(ch -> ch - '0').sum();
return x % sum == 0;
}
}
-'0'
이 아닌 -''
라고 사용해서 프로그램이 인식하지 못했던 것이었다..!