📌 문제
Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
📌 방법 1. StringBuilder의 reverse 이용
- 뒤집기의 문제를 보자마자 가장 먼저 StringBuilder의 reverse를 이용하는 방법이 생각났다.
- x가 음수일 경우도 존재하기에 나누어서 풀어주었고, NumberFormatException이 발생해 try~ catch~으로 처리했다.
- 시간은 4 ms가 소요되었고, 메모리는 42.2 MB가 사용되었다.
import java.lang.StringBuilder;
class Solution {
public int reverse(int x) {
try {
String str;
StringBuilder sb;
if (x < 0) {
x = Math.abs(x);
str = Integer.toString(x);
sb = new StringBuilder(str);
return -Integer.parseInt(sb.reverse().toString());
}
str = Integer.toString(x);
sb = new StringBuilder(str);
return Integer.parseInt(sb.reverse().toString());
} catch (NumberFormatException e) {
return 0;
}
}
}
📌 방법 2. 반복문을 이용
- 다른 방법인 반복문을 이용해서 직접 뒤집는 방법도 구현해보았다.
- 일의 자리를 나머지로 구한 후, 자리 수를 올리며 더해주는 방법이다.
- 시간은 1 ms가 소요되었고, 메모리는 39.4 MB가 사용되었다.
class Solution {
public int reverse(int x) {
/* 반환할 result 선언 */
int result = 0;
/* 반복문 */
while(x != 0) {
/*
* 결과 * 10 : 자리 수 올려주기
* x % 10 : 10으로 나누어 일의 자리수 나머지 더하기
*/
int check = result * 10 + x % 10;
/* 검산 */
if ((check - x % 10) / 10 != result) {
return 0;
}
/*
* x를 10으로 나누어 자리 수 줄이기
* 이미 x의 일의 자리 숫자는 나머지 값으로 구하여 더해 줌.
*/
x /= 10;
result = check;
}
return result;
}
}
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 008. String to Integer (atoi) JAVA (0) | 2022.12.21 |
---|---|
[LeetCode]006. Zigzag Conversion JAVA (0) | 2022.12.21 |
[LeetCode]005. Longest Palindromic Substring JAVA (0) | 2022.12.19 |
[LeetCode] 003. Longest Substring Without Repeating Characters JAVA (0) | 2022.12.16 |
[LeetCode] 002. Add Two Numbers JAVA (0) | 2022.12.16 |
댓글