티스토리 뷰

#include <stdio.h>

int main(void)
{
	int n, m, k, cnt=0;
	scanf("%d %d %d", &n, &m, &k);
	int map[1001][1001][3] = {}; //누적합을 저장할 배열
	char buff[n*(m+1)]; //fread을 위해서 사용할 배열
	
	fread(buff, sizeof(char), n*(m+1), stdin); //char형 데이터를 입력받음
	
	for(int i=1; i<=n; i++) //누적 합 처리
	for(int j=1; j<=m; j++, cnt++) {
		if(buff[cnt] == 10) cnt++; //'\n'가 나오면 다음 걸로
		//[][][0] : 정글, [][][1] : 바다, [][][2] : 얼음
        map[i][j][0] = (buff[cnt] == 'J') + map[i-1][j][0] + map[i][j-1][0] - map[i-1][j-1][0];
        map[i][j][1] = (buff[cnt] == 'O') + map[i-1][j][1] + map[i][j-1][1] - map[i-1][j-1][1];
		map[i][j][2] = (buff[cnt] == 'I') + map[i-1][j][2] + map[i][j-1][2] - map[i-1][j-1][2];
	}
	
	while(k--) { //쿼리 
		int a, b, c, d;
		scanf("%d %d %d %d",&a,&b,&c,&d);
		a--;
		b--;
		for(int i=0; i<3; i++)
		printf("%d ", map[c][d][i]-map[a][d][i]-map[c][b][i]+map[a][b][i]);
		printf("\n");
	}
}

풀이 : 누적 합

 

1. n, m, k 입력

2. 데이터를 fread로 입력 받음

3. 데이터가 무엇인지를 확인하고, 배열을 이용해서 누적합을 만듦

4. k개의 쿼리를 누적 합을 이용해서 처리합니다.

 

https://www.acmicpc.net/problem/5549

 

5549번: 행성 탐사

상근이는 우주선을 타고 인간이 거주할 수 있는 행성을 찾고 있다. 마침내, 전 세계 최초로 인간이 거주할 수 있는 행성을 찾았다. 이 행성은 정글, 바다, 얼음이 뒤얽힌 행성이다. 상근이는 이

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함