코드노트

Leetcode 7. Reverse Integer 자바스크립트 문제 풀이 본문

Code note/자바스크립트 알고리즘 문제풀이

Leetcode 7. Reverse Integer 자바스크립트 문제 풀이

코드노트 2022. 9. 27. 12:47

문제 설명

더보기

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.

부호 있는 32비트 정수 x가 주어지면 숫자가 반전된 x를 반환합니다.

x를 반전하면 값이 부호 있는 32비트 정수 범위 를 벗어나면 0을 반환합니다.

 

var reverse = function (x) {
  let y = x;
  if (x < 0) x *= -1;
  let str = String(x).split("").reverse().join("");
  if (y < 0) str = str * -1;
  if (str < -2147483648 || str > 2147483647) return 0;
  return str;
};

- 문제는 어렵지 않았다. 숫자가 변수로 들어오면 reverse하여 출력하면 된다.

- 단 조건은 32비트 정수범위를 벗어나면 0을 return한다.

 

- 우선 들어오는 변수값 x를 y변수에 저장해둔다. (x가 음수면 양수로 바꿔줘야하기 때문에 값을 저장해두었다. 원본이 사라진다)

- 만약 x가 음수이면 양수로 바꿔준다.

- 그리고 숫자를 문자로 바꿔주고 split.reverse.join으로 다시 해주면 숫자는 반대로 출력이 된다.

- 여기서 만약 x값을 저장해둔 y값이 음수라면 -1을 곱해주어 -로 바꿔준다.

- 그리고 마지막 반전한 값이 32비트 정수 범위를 벗어났는지 확인하고 0을 리턴하는 조건을 넣어주었다.

 

 

다른 풀이

var reverse = function(x) {
	//문자열로 반전
    let reversed = Math.abs(x).toString().split('').reverse().join('');
    // reversed값이 uint32 범위 내에 있는지 확인하고 int32는 확인할 필요가 없다.
    // 나중에 논리에서 뺴기 기호를 고려하기 때문에 양수만 확인한다.
    if(reversed > 2 ** 31 - 1 ) return 0;
    // 빼기 기호가 있으면 확인하고 추가해준다.
    return Math.sign(x) * reversed
};

- 처음에 abs를 통해서 절대값으로 만들어서 풀었으면 코드를 더 줄였을 수도 있었다.

- 그리고 32비트 값을 나는 정수로 범위를 나타내었는데 나중에 빼기기호를 넣기 때문에 양수만 확인하면 되는것도 좋은 방법이였다.

- sign을 사용하지 않았어서 생각조차 못했던 풀이였다.

 

자바스크립트에서 메서드들을 다시 한번 돌아볼필요가 있다고 느꼈다.

내가 풀던 코드들에서 사용안했던 것들이라 놓치고 있는것들도 많이 있는거 같다.