ABC075-B 備忘録 p.11
itsukiです。
AtCoderの過去問を解いた様子です。解説記事ではありません。
考察の流れ
Minesweeperと聞いて一瞬ひるむ…"マス" が出てくる問題に苦手意識がある
二次元配列で順番に処理していけば良さそう?
思いついた順にべた書き
#include <stdio.h>
int main(){
int h,w;
scanf("%d%d",&h,&w);
char s[51][51]={0};
for(int i=0; i<h; i++){ scanf("%s", s[i]); }
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
if( s[i][j] != '.' ){ continue; }
int cnt=0;
//上3か所
for(int u=j-1; u<=j+1; u++){
if( i-1 >= 0 && u >= 0 && s[i-1][u] == '#' ){ cnt++; }
}
//左
if( j-1 >= 0 && s[i][j-1] == '#' ){ cnt++; }
//右
if( j+1 >= 0 && s[i][j+1] == '#' ){ cnt++; }
//下3か所
for(int u=j-1; u<=j+1; u++){
if( i+1 >= 0 && u >= 0 && s[i+1][u] == '#' ){ cnt++; }
}
s[i][j] = 48+cnt;
}
printf("%s\n",s[i]);
}
return 0;
}
まとめ
・べた書きしたけど入力例含め一発ACだった
・格好つけずに確実に書く方が良さそう
(スマートに書ければもちろんベストだけど…)
引き続き、のんびり精進します。
この記事が気に入ったらサポートをしてみませんか?