2011년 2월 9일 수요일

10189 : Minesweeper

문제 : http://goo.gl/wkdW

빌어먹을... 코딩은 10분~15분만에 후다닥 했는데, 그놈의 출력규격때문에 한참을 헤메다가 겨우 AC받았다.
PC는 AC나오는데 Uva는 WA나올경우가 많다. 되게 사소한 실수 일때 그런 경우가 발생한다.(또는 PC가 테스트를 대충하는 경향이 없지않아 있는것 같다.)

어쨋든,
반복문(출력후 1줄 비우는 것)이 아닌
반복문(1줄 비우고 출력) - 물론 첫번째는 1줄비우면 안되는 if문을 넣어야 한다.(더러운 코딩 -_-+)
그래도 안되는 분은 한문자씩 처리한 경우 끝문자열을 처리 했는지 살펴보자.
*을 만나면 주변 8방향+1씩 올렸다.
Index Overflow&Underflow 참조 관리 귀찮고 귀찮아서 넉넉하게 배열선언했다.

for(field=1; ; field++)
 {
  int m, n;
  string map[100];
  int anal[102][102]={};
  //Input
  scanf("%d %d", &n, &m);
  if( m==0 && n==0) break;

  if(field>1) printf("\n");
  
  for(int i=0; i<n; i++)
   cin >> map[i];

  //Process
  for(int i=0; i<n; i++)
  {
   for(int j=0; j<m; j++)
   {
    if( map[i][j]=='*' )
    {
     warning(anal, i+1, j+1);
    }
   }
  }

  // Output
  cout << "Field #" << field << ":" << endl;
  for(int i=0; i<n; i++)
  {
   for(int j=0;j<m;j++)
   {
    if( map[i][j]=='*')
     printf("%c", map[i][j]);
    else
     printf("%d", anal[i+1][j+1]);
   }
   printf("\n");
  }
 }

void warning(int anal[][102],int x, int y)
{
 anal[x+1][y-1]++;
 anal[x+1][y]++;
 anal[x+1][y+1]++;
 anal[x][y-1]++;
 anal[x][y+1]++;
 anal[x-1][y-1]++;
 anal[x-1][y]++;
 anal[x-1][y+1]++;
}

댓글 없음:

댓글 쓰기