class Solution {
public boolean solution(int x) {
int sum = 0;
char[] chars = ("" + x).toCharArray();
for(int i=0; i<chars.length; i++) {
sum += chars[i] - '0'; // char 타입은 유니코드 값이 된다.
}
if(x % sum == 0) {
return true;
} else {
return false;
}
}
}
x의 값이 int 10이라고 char[0]이 숫자 1인 게 아니다.
char는...
Java에서 char 타입은 16비트 유니코드 문자를 저장하고 있습니다. 이는 유니코드 표준에 따른 각 문자의 고유한 숫자 값으로, 전 세계의 거의 모든 문자 체계를 포함합니다.
char는 보통 0에서 65535까지의 값을 가지며, 이는 유니코드의 기본 다국어 평면(Basic Multilingual Plane, BMP)을 완전히 커버합니다. 각 char 값은 해당하는 문자의 유니코드 코드 포인트를 나타냅니다. 예를 들어, 영문 대문자 'A'는 유니코드 값이 65, 소문자 'a'는 97, 숫자 '0'은 48입니다.
이러한 이유로, 문자가 숫자를 표현할 때는 그 문자에 해당하는 유니코드 값에서 '0'의 유니코드 값을 빼주어야 실제 숫자를 얻을 수 있습니다. 이는 Java 뿐만 아니라 다른 많은 프로그래밍 언어에서도 동일하게 적용됩니다.
char에 저장된 건 '문자'다. 겉으로는 그게 '문자'로 보이는데 실제로는 유니코드 값이다.
그래서 char 1은 int 1이 아니고 유니코드 값으로 int 49인 것.
따라서 char[i]에서 48을 빼(이건 보통 -'0'으로 처리한다.) 해당 문자가 가진 온전한 int 값을 나타내야 한다.
class Solution {
public boolean solution(int x) {
int sum = String.valueOf(x).chars().map(ch -> ch - '0').sum();
return x % sum == 0;
}
}
이 정도는 장황하지 않은 것 같다.
이 정도는 할 수 있게 계속 생각하면서 코딩하자!
'코딩테스트 연습' 카테고리의 다른 글
없는 숫자 더하기 (0) | 2024.05.02 |
---|---|
x만큼 간격이 있는 n개의 숫자 풀이 - Lv. 1 (0) | 2024.04.25 |
정사각형으로 만들기 (0) | 2024.04.25 |
소인수분해 (0) | 2024.04.24 |
문자 개수 세기 (0) | 2024.04.24 |