[리트코드] 29. Divide Two Integers
안녕하세요. 개발조각입니다.😊
이번 문제는 내장 함수를 쓰면 쉬운 문제라
내장 함수 쓰고 끝내버렸습니다.
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)
};
저는 어떻게 구했나면
- dividend / divisor 구하고 문자열로 바꾸기
- '.'의 앞에 오는 숫자 문자열만 남기기
이렇게 구했습니다.
이러면 웬만하면 다 해결이 되지만 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번의 경우 이와 같이 작성해주어 해당되면 바로 리턴되게 했습니다.

