알고리즘 공부/문제 풀이

[JAVA] 백준 17123 배열 놀이

valid_ming 2021. 9. 22. 19:38

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

 

17123번: 배열 놀이

N개의 행과 N개의 열로 구성된 2차원 정수 배열 A가 있다. A[r, c]는 r번째 행 c번째 열에 위치한 원소의 값을 나타낸다. 이 배열에 총 M번의 연산을 적용하는 배열 놀이를 생각해보자. 각 연산에 대

www.acmicpc.net

 

풀이

 

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        while(T-->0){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());

            int[][] arr = new int[N][N];
            int[] rows = new int[N];
            int[] cols = new int[N];

            //arr 값 받아오기와 rows, cols 초기화
            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;
                    rows[i] += val;
                    cols[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++){
                    rows[r] += (c2-c1+1)*v;
                }

                for(int c=c1; c<=c2; c++){
                    cols[c] += (r2-r1+1)*v;
                }
            }

            for(int i=0;i<N;i++) sb.append(rows[i]+" ");
            sb.append('\n');
            for(int i=0;i<N;i++) sb.append(cols[i]+" ");
            sb.append('\n');
        }
        System.out.println(sb);
    }
}