반응형
https://www.acmicpc.net/problem/2167
- 문제
- 문제 풀이
백준 2167번 2차원 배열의 합은 브론즈 1 난이도의 구현 문제이다. 이 문제는 배열이 주어지고 (i, j)와 (x, y)가 같이 주어졌을 때 (i, j)부터 (x, y)까지의 합을 구하면 된다.
이 문제는 간단하지만 코드는 좀 길다. 그 이유는 입력으로 주어지는 것도 길고 배열도 초기화하고 각 테스트 케이스마다 i, j, x, y까지 입력받아야 하기 때문이다. 하지만 문제는 복잡하지 않다.
배열에 저장할 수들을 입력받은 후에는 그냥 for-loop을 이용해서 i, j부터 x, y까지 더하고 출력해주면 된다. 이 문제는 DP를 이용해서 더 효율적으로 풀 수도 있지만 이 글에서는 DP를 이용하지 않고 풀도록 하겠다.
자세한 코드는 밑에 있는 코드를 참고하면 되겠다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][m];
// 배열 초기화
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
int k = Integer.parseInt(br.readLine());
for (int t = 0; t < k; t++) {
st = new StringTokenizer(br.readLine());
int i = Integer.parseInt(st.nextToken()) - 1;
int j = Integer.parseInt(st.nextToken()) - 1;
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
int sum = 0;
// (i,j)부터 (x,y)까지 더하기
for (int p = i; p <= x; p++) {
for (int q = j; q <= y; q++) {
sum += arr[p][q];
}
}
sb.append(sum + "\n");
}
System.out.print(sb);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 5522번 : 카드 게임 – JAVA [자바] (0) | 2022.08.03 |
---|---|
[백준] 5565번 : 영수증 – JAVA [자바] (0) | 2022.08.03 |
[백준] 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰 – JAVA [자바] (0) | 2022.08.02 |
[백준] 1271번 : 엄청난 부자2 – JAVA [자바] (0) | 2022.08.02 |
[백준] 10991번 : 별 찍기 - 16 – JAVA [자바] (0) | 2022.08.01 |
댓글