[Leetcode] 7. Reverse Integer
Algorithm2021. 7. 18. 20:16
반응형
Identifying the Problem
32bit 정수 x를 뒤집어 return한다. 정수 x가 32bit 을 초과할 경우 0을 return 한다.
Organizing thoughts
0. 음수일 경우 임시로 양수로 바꾸고, 마지막에 다시 음수로 바꿔준다.
1. 자리수 알아내기
1-1 <자리수 -1번 반복> x를 10으로 나눴는데 0이면 탈출, 아니라면 n++ (n초기값 1)
1-2 자리수만큼 ten 변수에 10을 곱해 자리수를 맞춰준다.
2. 일의 자리에서 백의 자리 쪽으로 자리수 추출
3. answer 에 num * ten 을 누적해서 더하고 ten을 10으로 나눔으로 자리수를 줄인다.
4. 만약 마지막 시도라면 answer에 x만 더한다.
5. 뒤집은 값이 범위를 초과 시, answer에 0을 대입한다.
6. answer 를 return 한다.
제약조건은 다음과 같다.
x 값 범위 [-2^31, 2^31 - 1]
Sourcecode
int reverse(long long int x){
long long int ten =1; //자리수 맞추기용
long long int n = 0; //자리수
long long int temp = x; //자리수 구할 때 사용할 x값
long long int num = 0; //추출된 숫자
long long int answer = 0; // 정답
long long int flag = 0; // 음수여부를 판단하는 flag
if(x<0) //0번
flag =1; x= x*(-1);
while(1) //1번
{
temp /= 10;
if(temp == 0) break;
else {ten*=10; n++;}
}
if(x>9)
{
for(int i=0; i<n; i++)
{
num = x%10; //2번
x = x/10;
answer += (num*ten); //3번
ten = ten/10; //자리수를 낮춘다.
if(i==n-1) answer +=x; //4번
}
if(flag ==1) {answer = answer*(-1);}
}
else if (x<10) answer =x; //1의 자리는 따로 과정을 밟지 않도록 한다.
if(answer>2147483647||answer<-2147483646) answer = 0; //5번
return answer;
}
Mistake
- 처음 x가 들어왔을 때 32bit 범위를 초과시 0을 return 하게 했는데, 뒤집은 결과 값도 32bit 범위를 초과하면 안 되었다.
- x 가 음수일 경우를 생각 못했다.
New things learned
- 일의 자리인 경우 바로 return을 해도 되지만, 음수인 일의 자리인 경우도 있어 마지막에 처리하였다.
반응형
'Algorithm' 카테고리의 다른 글
[Leetcode] 13. Roman to Integer (1) | 2021.07.20 |
---|---|
[Leetcode] 20. Vaild Parentheses (0) | 2021.07.20 |
[Leetcode] 9. Palindrome Number (0) | 2021.07.19 |
[Leetcode] 1. Two Sum (0) | 2021.07.18 |
[LeetCode] 0. 시작에 앞서 (2) | 2021.07.18 |
댓글()