Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

인사이트

[JAVA] int값 뒤집기 본문

JAVA

[JAVA] int값 뒤집기

쿰쿵 2021. 6. 2. 17:37

num의 값 123456789를 뒤집어서 987654321을 만들어보자!

int num = 123456789;
int reverse = 0;

while (num != 0) {
	int digit = num % 10;
	reverse = reverse * 10 + digit;
	num /= 10;
}
System.out.println(reverse);

 

계획

1. 123456789를 끝에서부터 한 개씩 자른다

2. 잘려진 숫자를 맨 앞에 차례대로 위치시킨다

 

어떻게 끝에 숫자를 가져올 수 있을까?

num을 10으로 나눈 나머지를 가져오면 된다.

무슨 말이냐면

123456789를 10으로 나누면 몫이 123456780이고 나머지가 9가 된다.

그래서 나머지를 가져온다는 건 마지막 자리 숫자를 가져오겠다는 말과 같은 말이 된다.

 

이제 그 숫자를 어떻게 맨 앞으로 가져올 수 있을까?

reverse에 10을 곱하고 내가 가져온 마지막 숫자를 더한다

이게 뭘 하는 코드냐면

마지막에 가져온 숫자를 앞자리부터 채워주는 코드이다

왜 그렇게 되는가? (계속 마지막 숫자를 가져올 수 있다는 가정하에 계산해보자면)

reverse(9) = reverse(0) * 10 + 9 = 9

reverse(98) = reverse(9) * 10 + 8 = 98

reverse(987) = reverse(98) * 10 + 7 = 987

reverse(9876) = reverse(987) * 10 + 6 = 9876

reverse(98765) = reverse(9876) * 10 + 5 = 98765

reverse(987654) = reverse(98765) * 10 + 4 = 987654

reverse(9876543) = reverse(987654) * 10 + 3 = 9876543

reverse(98765432) = reverse(9876543) * 10 + 2 = 98765432

reverse(987654321) = reverse(98765432) * 10 + 1 = 987654321

이렇게 되기 때문에 맨 앞자리부터 채워준다고 했던 것이다.

 

맨 위에서 이미 맨 마지막 숫자9를 가져왔던 것처럼 이제 8을 가져올 차례이다.

그건 어떻게 해야할까?

마지막이 12345678로 끝나야 다시 나머지8로 만들어서 가져올 수 있지 않을까?

그렇게 하기 위해서 num을 10으로 나눠준다

123456789 을 10으로 나누면 몫이 12345678*이 되기 때문이다.

* int형 타입은 딱 정수만을 나타내기 때문에(소수점은 버림) 몫만 가져오는 게 된다

 

그리고 이걸 반복해주면 된다.

근데 언제까지 반복해줘야할까?

num이 0.1*이 되기 전까지만 하면 된다.

* 0.1은 num이 123456789 → 1로 남았을 때 1을 10으로 나눈 값이다

그래서 그냥 간단하게 0이 아닌 정수일 동안 작업을 수행하라는 의미인 num != 0을 while의 조건으로 걸어준 것이다

 

'JAVA' 카테고리의 다른 글

[JAVA] 클래스의 구성요소  (0) 2021.06.03
[JAVA] 향상된 for문  (0) 2021.06.02
[JAVA] int배열 정렬 (오름차순, 내림차순)  (0) 2021.06.02
[JAVA] int배열의 합과 평균 구하기  (0) 2021.06.02
[JAVA] 정리 1  (0) 2021.05.31