[Leetcode] 7. Reverse Integer

Algorithm|2021. 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

댓글()