1 minute read


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