💻STUDY/BOJ

[BOJ] 2167. 2차원 배열의 합 (C)

coldNoodlePigeon 2022. 2. 25.
  • 코딩 초보

2167. 2차원 배열의 합 

 

2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다.

 

첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 합을 구할 부분의 개수 K(1 ≤ K ≤ 10,000)가 주어진다. 다음 K개의 줄에는 네 개의 정수로 i, j, x, y가 주어진다(1 ≤ i ≤ x ≤ N, 1 ≤ j ≤ y ≤ M).

 

K개의 줄에 순서대로 배열의 합을 출력한다. 배열의 합은 231-1보다 작거나 같다.

 


#include <stdio.h>

main() {
	int arr[300][300];
	int n, m,k,a,b,x,y,result;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf("%d", &arr[i][j]); 
		}
	}

	scanf("%d", &k); 
	for (int i = 0; i < k; i++) {
		result = 0; 
		scanf("%d %d %d %d", &a, &b, &x, &y);
		for (int p = a - 1; p <= x-1; p++) {
			for (int q = b - 1; q <= y - 1; q++) {
				result += arr[p][q];
			}
		}
		printf("%d\n", result); 
	}

}

처음에 문제를 잘못 이해하고 너무 어렵게 생각했는데, 단순히 2차원 배열을 생성해주고 좌표에서 좌표만큼 값들을 더하여 결과값을 출력하면 되는 간단한 문제이다. 

 

(1,1)의 경우 배열에서는 인덱스가 0,0이므로 -1을 해주는 것을 주의해주어서 코드를 작성하면 된다. 

'💻STUDY > BOJ' 카테고리의 다른 글

[BOJ] 2941. 크로아티아 알파벳 (C)  (0) 2022.02.28
[BOJ] 4673. 셀프 넘버 (C)  (0) 2022.02.26
[BOJ] 9012. 괄호 (Python)  (0) 2022.02.24
[BOJ] 10998. 팰린드롬인지 확인하기 (C)  (0) 2022.02.23
[BOJ] 2563. 색종이 (C)  (0) 2022.02.22

댓글