log 2022-05-10
blog
code-server에서 code 커맨드가 안 먹혀서 실행 못하는 줄 알았는데, code-server 명령으로 실행 가능했다. 다만 이전에 실행한 게 자동으로 안 꺼지는것인지 렉이 걸려서 재부팅해야했다. 그리고 code-workspace만 열 수 있다.
sport
leet - Divide Two Integers
- i32제한에, 곱셈도 금지라서 엣지케이스 처리에 구현이 더러워짐
- 시간복잡도 O(n)
rust solution
fn get_sign(num: i32) -> i32 {
if num < 0 {
return -1;
} else if num > 0 {
return 1;
} else {
return 0;
}
}
pub fn divide_impl(dividend: i32, divisor: i32) -> i32 {
let dividend_sign = get_sign(dividend);
let divisor_sign = get_sign(divisor);
let mut left_dividend = dividend;
if divisor == std::i32::MIN {
if dividend == std::i32::MIN {
return 1;
} else if dividend_sign == -1 && dividend > divisor {
return 0;
} else if dividend_sign == 1 && -dividend > divisor {
return 0;
}
return -divide_impl(dividend, -(divisor + 1));
} else if divisor_sign == -1 {
let res = divide_impl(dividend, -divisor);
if res == std::i32::MIN {
return std::i32::MAX;
} else {
return -res;
}
}
if dividend == std::i32::MIN {
if divisor == -1 {
return std::i32::MAX;
} else if divisor == 1 {
return dividend;
} else {
if divisor_sign == -1 && dividend < divisor {
return divide_impl(-(dividend-divisor), -divisor) + 1;
} else if divisor_sign == 1 && dividend < -divisor {
return -divide_impl(-(dividend+divisor), divisor) - 1;
} else {
dbg!("ERROR: dividend = {}, divisor = {}", dividend, divisor);
return 0;
}
}
} else if dividend_sign == -1 {
return -divide_impl(-dividend, divisor);
}
while left_dividend >= divisor {
left_dividend -= divisor;
quotient += 1;
}
return quotient;
}
impl Solution {
pub fn divide(dividend: i32, divisor: i32) -> i32 {
return divide_impl(dividend, divisor);
}
}
Comments