17123 배열 놀이 ⬛

kkmdevel·2024년 10월 4일

코딩테스트

목록 보기
14/21

📋문제 정리

  • 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();
    }
}
profile
25/08/12

0개의 댓글