Back End/JAVA

[Java] int 자료형의 응용(하샤드수)

수오니니 2022. 5. 9. 23:10

하샤드 수를 구하는 문제를 풀기위해 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.