見出し画像

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だった
・格好つけずに確実に書く方が良さそう
 (スマートに書ければもちろんベストだけど…)

引き続き、のんびり精進します。

#note初心者 #備忘録 #AtCoder #ABC #競技プログラミング #競プロ #C言語  

この記事が気に入ったらサポートをしてみませんか?