티스토리 뷰

https://www.acmicpc.net/problem/28438

 

28438번: 행렬 연산 (행렬 계산하기)

첫 줄에 행렬 $A$의 크기를 나타내는 $N$, $M$과 연산의 개수 $Q$가 공백으로 구분되어 주어집니다. $(1 \le N, M; N \times M \le 500\,000; 1 \le Q \le 500\,000)$ 다음 $Q$개의 줄에는 각 연산을 의미하는 세 개의

www.acmicpc.net

const readline = require('readline').createInterface({
	input: process.stdin,
	output: process.stdout,
});

let flag = false;
let matrix;
const mapR = new Map();
const mapC = new Map();
readline.on('line', function (line) {
	if (flag) {
		const command = line.split(' ').map(Number);
		if (command[0] == 1) {
			const [_, r, v] = command;
			if (mapR.has(r - 1)) {
				const cnt = mapR.get(r - 1);
				mapR.set(r - 1, cnt + v);
			} else {
				mapR.set(r - 1, v);
			}
		} else {
			const [_, c, v] = command;
			if (mapC.has(c - 1)) {
				const cnt = mapC.get(c - 1);
				mapC.set(c - 1, cnt + v);
			} else {
				mapC.set(c - 1, v);
			}
		}
	} else {
		flag = true;
		const [N, M, Q] = line.split(' ').map(Number);
		matrix = Array.from(Array(N), () => Array(M).fill(0));
	}
}).on('close', function () {
	mapR.forEach((v, k) => {
		for (let c = 0; c < matrix[0].length; c++) {
			matrix[k][c] += v;
		}
	});

	mapC.forEach((v, k) => {
		for (let r = 0; r < matrix.length; r++) {
			matrix[r][k] += v;
		}
	});

	console.log(matrix.map((v) => v.join(' ')).join('\n'));
	process.exit();
});
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함