지뢰찾기 (백준 4108)

코딩생활·2024년 1월 21일
0

백준문제풀이

목록 보기
185/308

안녕하세요. 오늘은 지뢰를 찾을 거예요.

문제

https://www.acmicpc.net/problem/4108

아이디어

count함수를 만들어서 count(x,y)를 x,y와 인접한 8칸중에서 '*'의 개수를 세는 함수로 정의합시다.
초기화 잘해주고 구현 잘해주면 됩니다.

소스코드

#include <iostream>
#include <string>
#define ll long long
using namespace std;

char s[111][111];
ll N, M, dx[8] = { -1,-1,-1,0,0,1,1,1 }, dy[8] = { -1,0,1,-1,1,-1,0,1 };
ll count(ll x, ll y)
{
    ll ans = 0;
    for (ll i = 0; i < 8; i++)
        if (s[x + dx[i]][y + dy[i]] == '*')
            ans++;
    return ans;
}

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    while (true)
    {
        cin >> N >> M;
        if (N == 0 && M == 0) return 0;
        for (ll i = 1; i <= N; i++)
            for (ll j = 1; j <= M; j++)
                cin >> s[i][j];
        for (ll i = 1; i <= N; i++)
        {
            for (ll j = 1; j <= M; j++)
                if (s[i][j] == '*') cout << '*';
                else cout << count(i, j);
            cout << "\n";
        }
        for (ll i = 1; i <= N; i++)
            for (ll j = 1; j <= M; j++)
                s[i][j] = '0';
    }
}


감사합니다.

0개의 댓글