본문 바로가기
코딩테스트 연습

하샤드 수 풀이 - 프로그래머스 Lv. 1

by 신재은👩🏼‍💻 2024. 4. 25.

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