이름부터 클릭하기 싫어보이는..! 연쇄행렬 최소곱셈 알고리즘에 대해 공부해보자.
혹시 설명을 보지 않고 문제부터 풀어보고 싶은 분들은 여기서 먼저 문제를 풀어봐도 좋다.
이 글에서는 일단 문제부터 읽어 보고, 풀이에 필요한 개념을 설명한 뒤, 식을 세워 코드에 적용시켜 보는 순으로 진행하겠다.
크기가 a by b
인 행렬과 크기가 b by c
인 행렬이 있을 때, 두 행렬을 곱하기 위해서는 총 a x b x c
번 곱셈해야합니다.
예를 들어서 크기가 5 by 3
인 행렬과 크기가 3 by 2
인 행렬을 곱할때는 총 5 x 3 x 2 = 30
번의 곱하기 연산을 해야 합니다.
행렬이 2개일 때는 연산 횟수가 일정 하지만, 행렬의 개수가 3개 이상일 때는 연산의 순서에 따라서 곱하기 연산의 횟수가 바뀔 수 있습니다. 예를 들어서 크기가 5 by 3
인 행렬 A, 크기가 3 by 10
인 행렬 B, 크기가 10 by 6
인 행렬 C가 있을 때, 순서대로 A와 B를 먼저 곱하고, 그 결과에 C를 곱하면 A와 B행렬을 곱할 때 150
번을, AB 에 C를 곱할 때 300
번을 연산을 해서 총 450
번의 곱하기 연산을 합니다. 하지만, B와 C를 먼저 곱한 다음 A 와 BC를 곱하면 180 + 90 = 270
번 만에 연산이 끝납니다.
각 행렬의 크기 matrix_sizes
가 매개변수로 주어 질 때, 모든 행렬을 곱하기 위한 최소 곱셈 연산의 수를 return하는 solution 함수를 완성해 주세요.