leetcode 7
문제 조건에서 나온 32-bit signed Integer
는 저희가 일반적으로 사용하고 있는 int
형의 범위 이더라구요. 그래서 int
의 범위를 벗어나는지 여부를 조사하면 될 것이라고 생각했습니다.
가장 먼저 든 생각은 매개변수로 받은 int
형을 String
로 바꾼 다음 역으로 배치한 다음 이후에 int
형으로 바꾸면 되지 않을까를 생각해보면서 구성해보았습니다. 간단하게 정리하면 아래와 같습니다.
- 입력받은 매개변수를 String으로 변환한다
- 음수와 양수를 구분하여 음수의 경우 인덱스를 끝에서부터 1까지, 양수의 경우 끝에서부터 0까지
char
형을 받아StringBuilder
에 넣는다. StringBuilder
의 결과값을 정수로 만든 후 음수, 양수에 따라 음수의 경우 -1을 곱해준다
이와 같은 과정에서 풀 경우 조건 중 32-bit signed Integer
검사를 안하고 있습니다. 이 경우 StringBuilder
에서 정수형으로 만들 때 try/catch문을 이용하여 catch문에서 NumberFormatException
의 경우 0이 반환되도록 해주면 됩니다.
이 문제에서 검색 결과 알 수 있었던 작은 사실들은 아래와 같습니다.
StringBuilder
에서 append()메서드를 사용할 때char
타입을 받을 수 있다.StringBuilder
를String
타입으로 사용하기 위해선 toString() 메서드를 사용해야 한다.
다른 사람들 코드 중 이런 것도 있네요. String
타입으로 바꾸지 않고 long
의 변수에 나머지를 이용하여 뒤숫자부터 하나씩 받으면서 만약 Integer
의 최대 value를 넘어가면 언제든 끝날 수 있게 구성되어 있습니다. Integer.MAX_VALUE
, res = res * 10 + temp % 10;
가 참 흥미롭네요. 다음엔 String
타입으로 바꾸지 않고 역으로 자리를 배치해봐야겠습니다.
class Solution {
public int reverse(int x) {
int temp = Math.abs(x);
long res = 0;
while(temp > 0 ) {
res = res * 10 + temp % 10;
if(res > Integer.MAX_VALUE) return 0;
temp = temp / 10;
}
return (int) (x>0?res:-res);
}
}
이 문제 이외에 '백준 온라인 저지'에서 '별찍기-11'을 풀었는데요. 이 부분은 내일 알고리즘 강의를 듣고 정리해서 올리도록 하겠습니다 :)
'Algorithm > problem solving' 카테고리의 다른 글
Today's Algorithm(2018-10-06) (0) | 2018.10.07 |
---|---|
Today's Algorithm(2018-10-05) (0) | 2018.10.05 |
Today's Algorithm(2018-10-03) (0) | 2018.10.03 |
Today's Algorithm(2018-10-02) (0) | 2018.10.02 |
Today's Algorithm(2018-10-01) (0) | 2018.10.01 |