BOJ - 1996 지뢰 찾기

2024. 10. 1. 12:45·코딩테스트
반응형

 

해결방법

크게 두 부분으로 나눠서 분석할 수 있다.

지뢰의 수와 위치를 입력받는 부분, 지뢰가 주위에 얼마나 있는지 분석하는 부분이다.

 

int N;
cin >> N;

vector<vector<char>> vec(N, vector<char>(N));

for (int i = 0; i < N; i++)
{
    for (int j = 0; j < N; j++)
    {
        cin >> vec[i][j];
    }
}

먼저 지뢰의 수와 위치를 입력받는 부분을 살펴보면 N값을 입력받고, Vector를 이용하여 N*N배열을 만들고 입력을 받는다는 것을 알 수 있다.

 

그다음 지뢰를 분석하는 부분인데, 지뢰가 감지되면 result에 숫자 대신 '*'을 입력하는 식으로 처리를 하고, 주위 8방향을 탐색하여 지뢰가 있다면 개수를 세서 mine_count에 더해준다. 만약 mine_count가 10이 넘는다면 M으로 표기해준다.

 

정답 코드

#include <iostream>
#include <vector>

using namespace std;

int dx[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
int dy[] = { -1, 0, 1, -1, 1, -1, 0, 1 };

int main()
{
    int N;
    cin >> N;

    vector<vector<char>> vec(N, vector<char>(N));

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cin >> vec[i][j];
        }
    }

    vector<vector<char>> result(N, vector<char>(N, '0'));

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (vec[i][j] >= '1' && vec[i][j] <= '9')
            {
                result[i][j] = '*';
                continue;
            }

            int mine_count = 0;

            for (int dir = 0; dir < 8; dir++)
            {
                int ni = i + dx[dir];
                int nj = j + dy[dir];

                if (ni >= 0 && ni < N && nj >= 0 && nj < N)
                {
                    if (vec[ni][nj] >= '1' && vec[ni][nj] <= '9')
                    {
                        mine_count += (vec[ni][nj] - '0');
                    }
                }
            }

            if (mine_count >= 10)
            {
                result[i][j] = 'M';
            }
            else if (mine_count > 0)
            {
                result[i][j] = mine_count + '0';
            }
        }
    }

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << result[i][j];
        }
        cout << endl;
    }

    return 0;
}
반응형

'코딩테스트' 카테고리의 다른 글

BOJ - 1934 최소공배수  (0) 2024.10.07
BOJ - 10812 바구니 순서 바꾸기  (0) 2024.10.04
BOJ - 18229 내가 살게, 아냐 내가 살게  (0) 2024.09.30
BOJ - 1978 소수 찾기  (0) 2024.09.26
BOJ - 2231 분해합  (1) 2024.09.26
'코딩테스트' 카테고리의 다른 글
  • BOJ - 1934 최소공배수
  • BOJ - 10812 바구니 순서 바꾸기
  • BOJ - 18229 내가 살게, 아냐 내가 살게
  • BOJ - 1978 소수 찾기
skajalf
skajalf
skajalf 님의 블로그 입니다.
  • skajalf
    skajalf 님의 블로그
    skajalf
  • 전체
    오늘
    어제
    • 분류 전체보기 (154)
      • UNITY (6)
        • FanGame (6)
        • Portfolio (0)
      • UnReal (0)
      • DirectX (0)
      • 코딩테스트 (114)
      • Programming (34)
        • C C# C++ (9)
        • 디자인 패턴 (0)
        • 자료구조 & 알고리즘 (3)
        • 기타 (22)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다들 아는거 굳이 적을 이유가 있을까..?
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
skajalf
BOJ - 1996 지뢰 찾기
상단으로

티스토리툴바