하샤드 수를 구하는 문제를 풀기위해 int -> String -> charAt을 이용하여 각 자리수를 char[ ]에 담고,
조건문을 통해 자리수 추출 및 StringBuilder.append를 이용하여 char에 담은 각 자리수를 다시 String으로 합쳐서
다시 int로 변환하여 계산을 했다.
문제를 보자마자 위의 방식이 떠올랐는데, 풀고나서 답을 보니 아래처럼 너무나 간단하게 int 자료형을 잘 이해하여 활용한 예시를 보고 허탈했다.
심지어는 봐도 처음엔 왜 저렇게 나오는지 이해가 잘 안되던데, 간단한 수학계산 문제도 생각이 갇히면 잘 해결이 안떠오르는 것 같다. int 자료형에 또 당했다.

핵심은
sum += num % 10; 이 수식을 통해 입력된 값의 첫번째 자리의 수를 찾아내는 것과
num /= 10; 이 수식을 통해 첫번째 자리를 제외한 수를 찾아내는 것
while(num>0)을 통해 반복해서 10의자리씩 줄여내면서 첫번째 자리수를 추출해내는 것.
ex) x = 123일 경우, num = 123.
sum = 123 % 10 ⇒ sum = 3; 123을 10으로 나눈 나머지는 3이 된다.
(첫번째 자리 수는 10으로 나눌 수 없기에 무조건 나머지로 추출해낼 수 있다!)
123 /= 10 ⇒ num = 12; 123을 10으로 나누면 int 자료형에 의해서 정수인 12가 된다.
(첫번째 자리를 제외한 나머지 자리수를 추출!)
sum = 12 % 10 ⇒ sum = 2; 12를 10으로 나눈 나머지는 2가 된다.
12 /= 10 ⇒ num = 1; 12를 10으로 나누면 int 자료형에 의해서 정수인 1이 된다.
sum = 1 % 10 ⇒ sum = 1; 1을 10으로 나눈 나머지는 1가 된다.
1 /= 10 ⇒ num = 0; 1을 10으로 나누면 int 자료형에 의해서 정수인 0이 된다.
따라서 sum = 6이 저장
123/6은 0이 아니기 때문에 하샤드 수가 아니라 false.
'Back End > JAVA' 카테고리의 다른 글
| [Java] 객체지향 프로그래밍 정리 1 (0) | 2022.05.15 |
|---|---|
| [Java] Stream과 for-loop (0) | 2022.05.11 |
| [Java] int 자료형의 Overflow (5) | 2022.05.11 |
| [Java] 문자배열 인덱스 활용(다트게임 - 프로그래머스 카카오 2018 LV1) (0) | 2022.05.10 |
| [Java] Annotation (0) | 2022.02.26 |