정보올림피아드지역예선

정보올림피아드 초등 - 지역예선] 2011년도 31-33번문제

원당컴 2016. 2. 14. 18:37
반응형

 

 

 

 

 

 

 

 

 

 

 

문제풀이) main 을 분석해 본다.


 

int main() { 

 int i, j, max_height = 0; 

 FILE *fi = fopen("INPUT.TXT", "r"); 

 fscanf(fi, "%d", &n); 

 for (i=0; i<=n+1; i++) 

   for (j=0; j<=n+1; j++) area[i][j] = 0; //area 변수 초기화

 for (i=1; i<=n; i++) 

   for (j=1; j<=n; j++) { 

     fscanf(fi, "%d", &area[i][j]); 

     if (max_height < area[i][j]) max_height = area[i][j]; // area 입력 받으면서 가장 높은 지점을 max_height 에 추출하여 입력한다.

   } 

  fclose(fi);

  //area 영역을 입력 받는다.

  /* 이부분에서 높이가 1 에서 max_height 까지 루프를 돌면서 잠기지 않는 영역을 찾아 내어 가장 많은 부분을 추출한다. */


따라서 (b) 에 들어갈 항목은 

 i < max_height 가 들어가면 된다.(i <= max_height 가 될 필요는 없다. i = max_heigth 인 경우 모두 잠기기 때문에 안잠기는 영역은 0 이다.)


CountArea() 함수를 분석해 본다.


int countArea( int h ) { 

 int i, j, cnt = 0; 

 for (i=0; i<=n+1; i++)

  for (j=0; j<=n+1; j++) visited[i][j] = 0;  //방문영역인 visited를 초기화

 for (i=1; i<=n; i++) 

   for (j=1; j<=n; j++) 

   if (area[i][j] > h && visited[i][j] == 0)  //area 의 높이가 잠기는 높이보다 높으면서 방문하지 않은 영역이면 bfs 루틴을 통해 잠기지 않는 부분을 방문한다.

   {  

      bfs(h, i, j); //방문한 영역이 있으면 cnt 를 증가 시킨다.

      cnt++; 

  } 

  return cnt;

}

 

bfs() 함수를 분석해 본다.

 


void bfs( int h, int x, int y ) {   

int qx[maxn*maxn+1], qy[maxn*maxn+1];    

int front, rear, nx, ny, i;    

front = rear = 0;    

rear++; 

qx[rear] = x; //방문하는 x 포지션을 기록

qy[rear] = y; //방문하는 y 포지션을 기록    

visited[x][y] = 1;    

while (front < rear) {        

  front++;        

  for (i=0; i<4; i++) {   //dx,dy 의 위치가 자신을 기준으로 위,아래,왼쪽,오른쪽 임         

    nx = qx[front] + dx[i];            

    ny = qy[front] + dy[i];

    if ((a)) {      //여기서 해당 포지션이 잠기는 높이보다 큰 경우이고 방문하지 않은 경우에만 방문위치를 설정 한다.          

        rear++; 

        qx[rear] = nx; 

        qy[rear] = ny;                 

        visited[nx][ny] = 1;            

      }        

    }        

  }

}


따라서 (a) 에 들어갈 항목은

area[nx][ny] > h && visited[nx][ny] == 0 임



33번 문제를 풀기 위해서는 잠기는 위치를 1 에서 9 까지 설정 하면서

지워 보면서 문제를 풀어 본다.

높이가 7 인 경우에 6개 구역이 잠기지 않는 것을 확인 할 수 있다.



반응형