728x90
1. 문제
2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다.
2. 풀이
[이 문제]와 동일한 방식으로 풀었다. 그림도 이전 글에서 가져왔다. (i,j)까지의 합은 (i-1,j)와 (i,j-1)을 합친 값에서 (i-1,j-1)을 뺀 것과 같다.
따라서 (i,j)부터 (x,y)까지 합을 구하려면 단순히 (x,y)-(i-1,j-1)을 하면 되는 게 아니라 (x,y)-(x,j-1)-(i-1,y)+(i-1,j-1)을 해야 한다.
import java.io.*;
import java.util.*;
public class BOJ_2167_2차원배열의합 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] sum = new int[N+1][M+1];
//입력 및 합 구하기
for(int i=1;i<=N;i++){
st = new StringTokenizer(in.readLine());
for(int j=1;j<=M;j++){
sum[i][j] = Integer.parseInt(st.nextToken()) + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1];
}
}
//계산
int K = Integer.parseInt(in.readLine());
StringBuilder sb = new StringBuilder();
int i,j,x,y;
for(int k=0;k<K;k++){
st = new StringTokenizer(in.readLine());
i = Integer.parseInt(st.nextToken());
j = Integer.parseInt(st.nextToken());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
sb.append(sum[x][y]-sum[x][j-1]-sum[i-1][y]+sum[i-1][j-1]).append('\n');
}
System.out.print(sb);
}
}
3. 결과
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 2143 두 배열의 합 - JAVA (0) | 2023.04.04 |
---|---|
[BOJ] 10986 나머지 합 - JAVA (0) | 2023.04.03 |
[BOJ] 15565 귀여운 라이언 - JAVA (0) | 2023.04.01 |
[BOJ] 1484 다이어트 - JAVA (0) | 2023.03.31 |
[BOJ] 15961 회전초밥 - JAVA (0) | 2023.03.30 |
댓글