배열 놀이
면접 대비시간 제한2초메모리 제한512 MB
N×N 배열과 M개의 직사각형 덧셈 연산이 주어질 때, 모든 연산을 적용한 뒤 각 행의 합과 각 열의 합을 출력한다.
문제
개의 행과 개의 열로 이루어진 2차원 정수 배열 가 있다. 는 번째 행 번째 열에 있는 원소의 값을 나타낸다.
이 배열에 총 번의 연산을 적용하는 배열 놀이를 생각해보자.
각 연산은 , , 을 만족하는 다섯 개의 정수 로 주어지며, 부터 까지의 사각형 영역에 속한 의 값에 를 더한다.
예를 들어 이고 인 배열에 다음 세 개의 연산을 순서대로 적용한다고 하자.
- 연산 1:
- 연산 2:
- 연산 3:
연산을 적용하기 전 는 다음과 같다.
A = [ [ 1 2 3 ]
[ 4 5 6 ]
[ 7 8 9 ] ].
연산 1을 적용하면 첫 두 행에 포함된 여섯 개의 원소 값이 바뀌어 다음과 같아진다.
A = [ [ 4 5 6 ]
[ 7 8 9 ]
[ 7 8 9 ] ].
연산 2를 적용한 후:
A = [ [ 4 5 6 ]
[ 7 3 9 ]
[ 7 3 9 ] ].
연산 3을 적용한 후:
A = [ [ 5 6 6 ]
[ 8 4 9 ]
[ 8 4 9 ] ].
이렇게 세 개의 연산을 모두 적용한 다음, 마지막으로 얻은 배열의 각 행 원소 합과 각 열 원소 합을 구하려고 한다. 위 예에서 행 원소 합은 이고(1번 행부터 3번 행까지), 열 원소 합은 이다(1번 열부터 3번 열까지).
, , 2차원 배열 , 개의 연산이 주어졌을 때, 배열에 연산을 모두 적용한 후 각 행 원소 합과 각 열 원소 합을 구하는 프로그램을 작성하시오.
입력
첫 줄에 테스트 케이스의 수 가 주어진다 ().
각 테스트 케이스는 다음과 같다. 첫 줄에 두 정수 과 이 공백으로 구분되어 주어진다 (, ).
다음 줄에 걸쳐 2차원 배열 가 주어지며, 번째 줄이 번째 행을 나타낸다. 각 줄의 번째 정수는 번째 열의 원소 값을 나타낸다. 배열 의 각 원소는 이상 이하의 정수이다.
다음 줄에 걸쳐 각 줄에 다섯 개의 정수 가 공백으로 구분되어 주어진다. 항상 , , 을 만족한다.
출력
각 테스트 케이스마다 두 줄에 걸쳐 정답을 출력한다.
첫째 줄에는 개의 정수로 표현된 각 행의 합을 공백으로 구분하여 출력한다(1번 행부터 번 행까지).
둘째 줄에는 개의 정수로 표현된 각 열의 합을 공백으로 구분하여 출력한다(1번 열부터 번 열까지).
힌트
첫 번째 테스트 케이스는 문제에 설명되어 있다.
두 번째 테스트 케이스에서 연산을 적용하면 배열이 다음과 같이 바뀐다.
[ [ -20 -10 ]
[ 0 10 ] ].
따라서 행 원소 합은 이고 열 원소 합은 이다.
세 번째 테스트 케이스에서 연산을 모두 적용하면 원소 값이 2000인 배열이 남는다.
대부분의 경우 PyPy가 Python보다 빠르므로, Python으로 시간 초과를 받으면 PyPy를 사용하는 것이 좋다.