Written

leetcode / 7. Reverse Integer / JavaScript 본문

알고리즘 문제풀이

leetcode / 7. Reverse Integer / JavaScript

steeringhead 2023. 2. 21. 18:55

https://leetcode.com/problems/reverse-integer/

 

Reverse Integer - LeetCode

Reverse Integer - 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 in

leetcode.com

입력으로 주어지는 32비트 정수 x가 있습니다. 그리고 x를 뒤집은 숫자를 리턴합니다.

만약 x를 뒤집은 리턴값이 -2^31 보다 작거나 2^31 - 1 보다 크면 0을 리턴합니다.

 

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

 

Constraints:

  • -2^31 <= x <= 2^31 - 1

x값이 음수인 경우를 처리하기 위해 flag변수를 만들고 음수인 경우엔 미리 -1을 곱하여 양수를 만듭니다.

또한 x값들을 저장하기 위한 배열도 하나 만들어두고 , String(x)를 통해 문자열로 먼저 변환합니다.

그리고 for문을 통해 하나씩 배열에 push하고 뒤에서 부터 꺼내면서 빈 문자열에 더하는 연산을 해줍니다.

이 때, 하나 조심할 점은 배열에서 pop()을하면 배열의 length가 계속 줄어들기 때문에 for문에 stack.length를

미리 받아온 변수에 넣어서 사용해야합니다 ! 분명 문제가 없다고 생각했는데 , 자꾸 답이 이상하게 출력되어서

찾아본 결과 그냥 stack.length를 for문에서 쓰고있어서 답이 올바르게 안나오고 있었습니다,,

마지막에는 flag변수를 확인해서 처음 x가 음수였으면 다시 -1을 곱해주는 작업과 , 조건을 만족하지 못하는 범위의

x면 return 0;을 하게끔 처리만 하면 어렵지 않게 답을 구할 수 있었습니다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    const stack = new Array;
    let flag = true;
    if (x < 0){
        flag = false;
        x *= -1;
    }
 
    const str = String(x);
    
    for (let i=0;i<str.length;i++){
        if ( i === str.length-1 && str[i] === '0'){
            continue;
        }
        else{
            stack.push(str[i]);
        }        
    }
 
    let ansNum ='';
    let length = stack.length;
 
    for (let i=0;i<length;i++){
        const temp = stack.pop();
        ansNum += temp;
    }
 
    ansNum = Number(ansNum);
    const a1 = (2**31)*-1;
    const a2 = (2**31- 1;
 
    if (flag === false){
        ansNum *= -1;
    }
 
    if (ansNum < a1 || ansNum > a2){
        return 0;
    }
    else{
        return ansNum;
    }
 
    
};
cs

 

 

 

Comments