10709번. 기상캐스터

문제

JOI시는 남북방향이 H 킬로미터, 동서방향이 W 킬로미터인 직사각형 모양이다. JOI시는 가로와 세로의 길이가 1킬로미터인 H × W 개의 작은 구역들로 나뉘어 있다. 북쪽으로부터 i 번째, 서쪽으로부터 j 번째에 있는 구역을 (i, j) 로 표시한다.
각 구역의 하늘에는 구름이 있을 수도, 없을 수도 있다. 모든 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다. 오늘은 날씨가 정말 좋기 때문에 JOI시의 외부에서 구름이 이동해 오는 경우는 없다.
지금 각 구역의 하늘에 구름이 있는지 없는지를 알고 있다. 기상청에서 일하고 있는 여러분은 각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 예측하는 일을 맡았다.
각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 구하여라.

입력

입력은 1 + H 행으로 주어진다.

첫 번째 행에는 정수 H, W (1 ≦ H ≦ 100, 1 ≦ W ≦ 100) 가 공백을 사이에 주고 주어진다. 이것은 JOI시가 H × W 개의 작은 구역으로 나뉘어 있다는 것을 의미한다.

이어진 H 개의 행의 i번째 행 (1 ≦ i ≦ H) 에는 W문자의 문자열이 주어진다. W 개의 문자 중 j번째 문자 (1 ≦ j ≦ W) 는, 구역 (i, j) 에 지금 구름이 떠 있는지 아닌지를 나타낸다. 구름이 있는 경우에는 영어 소문자 'c' 가, 구름이 없는 경우에는 문자 '.' 가 주어진다.

출력

출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시한다. 단, 처음부터 구역 (i, j) 에 구름이 떠 있었던 경우에는 0을, 몇 분이 지나도 구름이 뜨지 않을 경우에는 -1을 출력한다.

소스코드

#include <stdio.h>

int joi[100][101];
int h,w;
char a;
int main(){

scanf("%d %d\n",&h,&w); 

- JOI라는 2차원 배열 선언함. 최대크기는 문제에서 주어진 100*100
- h,w는 각각 높이와 너비이다.
- 문자를 a에 입력받아 a가 '어떤 문자'인지에 따라 방향정해짐.

for(int i=0;i<h;i++)
{
	for(int j=0;j<=w;j++)
	{
		a=getchar();
		if(a=='c')
		{joi[i][j]=0;}
		else
		{joi[i][j]=-1;}
	}
}

배열 입력받기 :
만약에 입력받은 문자가 'c'이면 해당배열 값은 0
'c'가 아니라면 해당배열값은 -1

for(int i=0;i<h;i++)
		{
			for(int j=0;j<w;j++)
			{
				if(joi[i][j]==0)
				{
				int count =1;
					for(int k=j+1;k<w;k++)
					{
						if(joi[i][k]==-1)
					  	{
						joi[i][k]=count++;
                     				}
                                 		else
                                	 	{
                                 		break;
                                 		}
                            	   	}
                      	 	}
           		}
  		}
     
  1. joi[0][0]~ j[h-1][w-1] 까지 알아보자 (for문을 통해서)
  1. 만약에 해당 배열값이 0이면
    for(int k=j+1;k<w;k++) 을 통해 입력받은문자가 무엇인지에따라 오른쪽 값들을 바꿔준다.
  1. 해당 배열의 오른쪽값이 -1, 즉 c가아니면 count++값을 가진다.(c로부터의 거리라고 생각하면 이해 ok)
    만```
    약 해당배열의 오른쪽값이 -1이 아니면(입력받은 문자가 c인경우) 그냥 for(int k=j+1;k<w;k++) 문을 빠져나온다.

for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			printf("%d ",joi[i][j]);
		}
		printf("\n");	
		
		}
	
	
	
	
		return 0;	}

       
> 배열값 프린트 하고 끝!	


좋은 웹페이지 즐겨찾기