2167번: 2차원 배열의 합

문제접근🤔


  1. 첫번째 접근

    //pseudo code
    
    cin >> n,m
    cin >> 2차원배열
    
    while(k--)
    {
    	cin >> i,j,x,y
    	while( <= n && <= x)
    		while( <= m && <= y)
    			sum += '2차원 배열의 해당인덱스의 값'
    	cout << sum
    }
    
    //초기화 잘하기
    

    이 흐름대로면 (1,2) (2,3)에서 올바른 값을 구할 수가 없음

    while 안에서 인덱스에 대한 초기화가 계속 일어나더라도, (1,2) (1,3) (2,1) (2,2) (2,3)을 구하는 것이 아니라 (1,2) (1,3) (2,2) (2,3) 을 구하게 됨. 이 부분에 대해서 더 생각할 필요가 있어 보임

    → 문제를 잘못 이해했었는데 이 접근이 맞음

  2. 두번째 접근

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/24357a68-81e8-43bd-a4e7-49b0539038c0/Untitled.png

    //pseudo code
    
    cin >> n,m
    cin >> 2차원배열
    
    while(k--)
    {
    	cin >> i,j,x,y
    	while (j <= m)
    		//첫좌표에 해당하는 같은 행들에 대한 연산 
    	while (i + 1 <= x - 1) // 그 다음 행들부터 마지막 좌표가 포함된 행 전까지에 대한 연산
    		while ( <= m)
    			//첫좌표와 마지막좌표 사이의 행들에 대한 연산
    	while ( <= y)
    		//마지막좌표에 해당하는 같은 행들에 대한 연산
    	cout << sum
    }
    //index 초기화 조심
    
  3. 세번째 접근

    //pseudo code
    cin >> n , m , k
    cin >> 1차원
    
    while(k--)
    {
    	cin >> i,j,x,y
    	while (i*j <= x*y)
    		누적합
    	cout << 누적합 << "\\n"
    }
    

    → 문제를 완전히 잘못 이해함.........

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/90063e37-1935-4b40-bc47-2544d46e33dc/Untitled.png

    (1,3) (2,3) 을 입력 받으면,

    빨강세모를 계산하는게 아니라 파란원을 계산해야함

    결국 첫번째 접근이 정답이었음..

놓쳤던 부분😅


코드😁


2416 KB

572 ms

#include <iostream>
#include <vector>

int n,m,k;
std::vector<std::vector<int> > input_arr;

void input_setting()
{
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
}

void input()
{
	int i,j;

	i = 0;
	std::cin >> n >> m;
	input_arr.resize(n + 1, std::vector<int>(m + 1, 0));
	while (++i <= n)
	{
		j = 0;
		while (++j <= m)
			std::cin >> input_arr[i][j];
	}
	std::cin >> k;
}

void solution()
{
	int i, j, x, y;
	int row, col;
	int sum;

	while (k--)
	{
		sum = 0;
		std::cin >> i >> j >> x >> y;
		row = i - 1;
		while (++row <= n && row <= x)
		{
			col = j - 1;
			while (++col <= m && col <= y)
				sum += input_arr[row][col];
		}
		std::cout << sum << "\\n";
	}
}

int main(void)
{
	input_setting();
	input();
	solution();
	return (0);
}