알고리즘🅰/리트코드

[리트코드] 29. Divide Two Integers

개발조각 2022. 9. 28. 18:47
728x90
반응형

안녕하세요. 개발조각입니다.😊
이번 문제는 내장 함수를 쓰면 쉬운 문제라
내장 함수 쓰고 끝내버렸습니다.


https://leetcode.com/problems/divide-two-integers/

Divide Two Integers - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


이문제는 dividend / divisor 한 값에 소수점을 버리고 정수부 분만 가지고 오는 문제입니다.
Math.floor()를 생각하실 수 있겠지만 아쉽게도 Math.floor()은 -2.7335일 경우에는 -3이 됩니다.
그래서 다른 방법으로 풀어야 되는 문제입니다.


해결방안

var divide = function(dividend, divisor) {
    let div = String(dividend / divisor);
    
    if(div > (2**31 -1)) return 2**31 -1;
    else if(div < (-2)**31) return (-2)**31;    
    
    let idx = div.indexOf('.');
    return idx < 0 ? div : div.slice(0, idx)
};

저는 어떻게 구했나면

  1. dividend / divisor 구하고 문자열로 바꾸기
  2. '.'의 앞에 오는 숫자 문자열만 남기기

이렇게 구했습니다.

이러면 웬만하면 다 해결이 되지만 2가지 경우에 대해 문제가 생깁니다.

1. dividend / divisor를 해주었을 때 소수점이 안 나오고 정수일 경우
이 경우에는 dividend / divisor값을 바로 리턴해 주었습니다.

2. dividend / divisor이 -2의 31승보다 작거나 2의 31승 -1 보다 클 경우
-2의 31승보다 작으면 -2의 31승을 리턴해주어야 되고
2의 31승 -1 보다 클 경우 2의 31승 -1을 리턴해주어야 됩니다.

return idx < 0 ? div : div.slice(0, idx)

1번의 경우 아래와 같이 작성을 하여 구분해 주었고

    if(div > (2**31 -1)) return 2**31 -1;
    else if(div < (-2)**31) return (-2)**31;

2번의 경우 이와 같이 작성해주어 해당되면 바로 리턴되게 했습니다.

728x90
반응형