성장일기

코딩테스트에서 하나의 정수 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을 나누어 첫 째 자리를 없앤다
}

 

 

 

이전의 내가 배열을 이용한 방법과 수학적인 특성을 이용한 방법의 성능을 비교해 보았다.

주어진 수가 커지면 커질수록 성능차이는 엄청났다.

이전에 내가 사용했던 방법
수학적인 특성을 이용한 방법

보시다시피 성능차이가 엄청났다.... 되도록 수학적인 방법을 사용하도록 해야겠다

공유하기

facebook twitter kakaoTalk kakaostory naver band