
📋문제 정리
- 2차원 배열에 좌표 두개와 값이 주어지는데 그 좌표 사이에 주어진 값을 더한다.
- 그렇게 수정된 2차원 배열의 각 행과 열의 합을 구하는 문제이다.
🎯풀이
- 2차원배열을 초기화하면서 행과 열의 배열을 생성하여 같이 초기화한다.
- r1, c1 / r2, c2가 주어지면 각 행과 열의 좌표 개수는 r2-r1+1 이다 c도 동일하다.
- 좌표의 개수에 주어진 값 v를 곱한 값을 마지막에 더하면 하나씩 더하지 않아도 된다.
- 행과 열의 배열에 반복하여 개수와 값을 곱한값을 더하여 출력한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
int t = Integer.parseInt(st.nextToken());
while (t-- > 0) {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][n];
int[] row = new int[n];
int[] col = new int[n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
int val = Integer.parseInt(st.nextToken());
arr[i][j] = val;
row[i] += val;
col[j] += val;
}
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int r1 = Integer.parseInt(st.nextToken()) - 1;
int c1 = Integer.parseInt(st.nextToken()) - 1;
int r2 = Integer.parseInt(st.nextToken()) - 1;
int c2 = Integer.parseInt(st.nextToken()) - 1;
int v = Integer.parseInt(st.nextToken());
for (int r = r1; r <= r2; r++) {
row[r] += (c2 - c1 + 1) * v;
}
for (int c = c1; c <= c2; c++) {
col[c] += (r2 - r1 + 1) * v;
}
}
for (int i = 0; i < n; i++) sb.append(row[i]).append(" ");
sb.append('\n');
for (int i = 0; i < n; i++) sb.append(col[i]).append(" ");
sb.append('\n');
}
System.out.println(sb);
br.close();
}
}