음 뭐 책을 사놓고 도통 보지 않는 것 같아 오늘 야근 하고 돌아온 김에 잠시 봤는데 시간이 없어 많은 것을 생각하는 문제는 선택하지 못하고 아주 간단한 문제를 선택해봤습니다. 아무래도 첫 술부터 배부를 수는 없듯이 차근차근 있는 문제 그냥 연습한다 치고 하나씩 풀어보기로 했습니다. 문제의 이름은 Mine Sweeper네요. 대충 입력, 출력의 예와 코드 는 다음과 같습니다.
입력 4 4 *... .... .*.. .... 출력 *100 2210 1*10 1110
MineSweeper.cpp (Language : cpp)
#include <iostream>
int Width, Height;
char MineField[ 100 ] [ 100 ] ;
int GetField( int col, int row)
{
if ( ( 0 <= col && col < Height) &&
( 0 <= row && row < Width ) ) {
return ( MineField[ col] [ row] == '*' ? 1 : 0 ) ;
}
return 0 ;
}
char Calculate( int col, int row)
{
if ( GetField( col, row) )
return '*' ;
int Count = 0 ;
Count += GetField( col - 1 , row - 1 ) ;
Count += GetField( col - 1 , row ) ;
Count += GetField( col - 1 , row + 1 ) ;
Count += GetField( col, row - 1 ) ;
Count += GetField( col, row + 1 ) ;
Count += GetField( col + 1 , row - 1 ) ;
Count += GetField( col + 1 , row ) ;
Count += GetField( col + 1 , row + 1 ) ;
return '0' + Count;
}
int main( int argc, char **argv )
{
while ( true ) {
std::cin >> Width >> Height;
if ( Width == 0 && Height == 0 )
break ;
for ( int i = 0 ; i < Height; ++i ) {
for ( int j = 0 ; j < Width; ++j ) {
std::cin >> MineField[ i] [ j] ;
}
}
for ( int i = 0 ; i < Height; ++i ) {
for ( int j = 0 ; j < Width; ++j ) {
std::cout << Calculate( i, j) ;
}
std::cout << std::endl ;
}
}
return 0 ;
}
복잡한 문제는 아니죠^^? 그냥 아주 간단하길래 대충 생각하고 대충 풀었습니다. 코드가 즈질 이군요 ㅎㅎ
계속해서 한 문제씩 차근차근 풀어봐야 겠습니다.
크리에이티브 커먼즈 라이센스
트랙백 주소 :: http://www.filewiki.net/tc/trackback/75
댓글을 달아 주세요