CS 벼락치기 - 행렬
2022-06-13
행렬이 뭐죠..?
물론 행렬은 선형대수에 있어서 매우 중요하지만 지금같은 그냥 프로그래밍에선 이차원 리스트로 생각하면 된다. 은 A = [[1,0,0],[0,1,0], [0,0,1]]로 표현된다. 일차원이 행, 이차원이 행에 딸린 열을 표현하는 용이라고 생각하자.
상위/하위 삼각행렬의 합
말 그대로 주대각선을 기준으로 위에 있는, 그리고 아래에 있는 원소들을 모아놓은 삼각행렬이다. CS에선 이들 원소들의 합을 구하는 것을 다룬다. 아래 그림에서 색칠된 부분 중 위 부분이 상위삼각, 아래 부분이 하위삼각행렬이다. 인덱스를 써놨는데, 상위삼각은 인 원소들이고, 하위삼각은 인 원소들이다. 이 조건을 걸어서 부합하는 원소들을 모두 더해주면 되는 간단한 로직이다.
상위 삼각행렬에 특정 수를 갖고 대칭인 원소들의 갯수는?
대칭이라는 것은 라는 것이다. 위의 그림에서 생각해보면 당연한 사실이다. 인덱스를 서로 바꿔도 값이 같다면 대칭인 원소일 것이다. 그렇다면 인 원소들 중에서 인 원소를 발견하면 increment를 1씩 증가시켜주면 될 것이다.
두 행렬의 합
두 행렬의 합은 두 행렬의 크기가 같을때 같은 위치의 원소들을 각각 더하는 것으로 정의된다. 따라서 a와 b 두 행렬을 더한 c를 구하려 할때는 를 이용해 모든 원소에 대해 돌려주면 된다.
두 행렬의 곱
두 행렬의 곱은 다소 복잡하다. a와 b 두행렬을 곱할 때 a의 행 수와 b의 열수가 같아야 행렬곱 연산이 가능하다. a의 행과 b의 열을 갖고 연산하게 되는데, 이때 a의 행첨자용 i와 열첨자용 j뿐 아니라 b의 열첨자를 하나씩 증가시키는 용도로 k라는 변수를 지정해 로 연산되게 했다.