코딩테스트에서 하나의 정수 n이 주어지면 각 자릿수의 정수별로 무언가를 처리해야할 때가 있다.
예시) 정수 1234 -> 1, 2, 3, 4
int n = 1234;
int a = 1;
int b = 2;
int c = 3;
int d = 4;
이전의 내가 사용했던 방법은 아래와 같다.
int n = 1234;
Strint[] str = String.valueof(n).split("");
int[] box = new int[str.length]
for(int i=0; i<str.length; i++){
box[i] = Integer.parsInt(str[i]);
}
String형 배열과 split함수를 이용하여 int형 n을 문자열 n으로 바꾼 후, split함수를 이용하여 각각의 자릿수의 값을 배열에 문자로 저장한 후 이를 다시 int형 배열에 옮겨주었다.
이 방법도 유용할 때가 있을 것 같긴하다.
1. 위의 방법은 매우 번거로운 작업이며, 수학적인 특성을 이용하면 좀 더 간단하게 해결할 수 있다.
int n = 1234;
int a, b, c, d; //각각 천의자리, 백의자리, 십의자리, 일의자리 - 배열로 처리해도 무방
a = n / 1000;
n %= 1000;
b = n / 100;
n %= 100;
c = n/10;
n %= 10;
d = n;
// a=1, b=2, c=3, d=4
2. 두번째 방법이다. 개인적으로 이 방법이 더 좋은 것 같다. why? 주어진 n이 몇자리수인지 몰라도 적용할 수 있다(while문 활용).
int n = 7369;
int a, b, c, d; //각각 천의자리, 백의자리, 십의자리, 일의자리 - 배열로 처리해도 무방
d = n % 10;
n /= 10;
c = n % 10;
n /= 10;
b = n % 10;
n /= 10;
a = n % 10;
n /= 10;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int sum = number;
while(number != 0){
sum = sum + (number % 10); // 첫 째 자리수
number = number/10; // 10을 나누어 첫 째 자리를 없앤다
}