let input = require("fs").readFileSync("example.txt").toString().split("\n");
let input2 = input.map((elm) => elm.split(" ").map((x) => parseInt(x)));
// 배열 a 행 / 렬
const a = [];
const b = [];
// a배열 만들기
var [aN, aM] = input2.shift();
for (var i = 0; i < aN; i++) {
a.push(input2.shift());
}
// b배열 만들기
var [bN, bM] = input2.shift();
for (var i = 0; i < bN; i++) {
b.push(input2.shift());
}
// b배열의 행과 열 위치 바꾸기
var c = [];
while (b[0].length > 0) {
var temp = [];
// b의 행만큼 반복문을 돌면서 앞에서부터 하나씩 빼서 temp에 넣어주기
for (var i = 0; i < bN; i++) {
temp.push(b[i].shift());
}
c.push(temp);
}
const result = [];
// aN * bM 배열이 된다.
for (var i = 0; i < aN; i++) {
var temp = [];
var row = a[i]; // i번째 행 기준으로 c 배열의 j행들을 처리
for (var j = 0; j < bM; j++) {
var sum = 0;
var col = c[j];
for (var k = 0; k < aM; k++) {
sum += row[k] * col[k];
}
temp.push(sum);
}
result.push(temp);
}
const ans = result.map((x) => x.join(" ")).join("\n");
console.log(ans);
풀이
- a배열과 b배열 데이터 처리하기 -> shift() 메소드 사용.
- b배열의 행과 열을 바꾸어주어서 행렬 곱을 처리하기 쉽도록 한 c배열을 만든다.
- 마지막 3중 포문,, -> a배열에 행을 기준으로 c배열의 행(b배열의 열이므로 bM까지)을 가져와서 원소 하나씩 접근하여 2차원 배열을 만든다.
댓글남기기