Matrix Determinant (4kyu)

Mark Lee·2022년 1월 3일
0

CodeWars

목록 보기
9/12

https://www.codewars.com/kata/52a382ee44408cea2500074c/cpp

추천 kata에 뜬금없이, 행렬식(Matrix Determinant)를 구하는 문제가 나왔습니다. 행렬식은 사실 구하는 방식이 매우 다양한데, 여기서는 Recusive방식을 설명하고 있습니다.

간단히 Recusive 코드를 작성하면 아래와 같고,
그냥 통과했네요..

자세한 이론은 아래 링크를 참고바랍니다.
https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC%EC%8B%9D#%EC%9E%AC%EA%B7%80%EC%A0%81_%EC%A0%95%EC%9D%98

long long determinant(std::vector<std::vector<long long>> m) 
{
    size_t sz = m.size();

    if (sz == 1)
        return m[0][0];

    long long sum = 0;
    long long s = 1;
    for (int i = 0; i < sz; ++i)
    {
        std::vector<std::vector<long long>> sub;

        for (int r = 1; r < sz; ++r)
        {
            sub.push_back(std::vector<long long>());
            for (int c = 0; c < sz; ++c)
            {
                if(c == i)
                    continue;

                sub.back().push_back(m[r][c]);
            }
        }

        long long e = m[0][i];
        long long subD = determinant(sub);
        long long val = s * e * subD;
        sum += val;
        s *= -1;
    }

    return sum;
}
profile
C++/C#, Python을 주로 사용하는 개발자입니다. Engineering 알고리즘 개발을 주 업무로 하고 있습니다.

0개의 댓글