백준/실버

[백준 5212번] 지구 온난화 (C++)

게임개발기원 2023. 3. 5. 21:10

문제링크 : https://www.acmicpc.net/problem/5212

 

5212번: 지구 온난화

첫째 줄에 지도의 크기 R과 C (1 ≤ R, C ≤ 10)가 주어진다. 다음 R개 줄에는 현재 지도가 주어진다.

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    char arr[10][10];
    char result[10][10];

    int R, C, cnt;
    int minx = 987654321, miny = 987654321, maxx = -1, maxy = -1;
    cin >> R >> C;

    for(int i=0; i<R; i++)
    {
        for(int j=0; j<C; j++)
        {
            cin >> arr[i][j];
            result[i][j] = '.';  //바다로 초기화
        }
    }

     for(int i=0; i<R; i++)
    {
        for(int j=0; j<C; j++)
        {
            cnt = 0;
            if(arr[i][j] == 'X') //해당 지점이 섬인데, 동서남북 방향으로 섬이 있는지 확인
            {
                if(i!=0 && arr[i-1][j] == 'X') cnt++;
                if(j!=0 && arr[i][j-1] == 'X') cnt++;
                if(arr[i][j+1] == 'X') cnt++;
                if(arr[i+1][j] == 'X') cnt++;
                if(cnt >= 2)  //동서남북 방향으로 2개이상 섬이있다면, 이 섬은 잠기지 않음
                {
                    result[i][j] = 'X';
                    maxx = max(i, maxx);
                    minx = min(i, minx);
                    maxy = max(j, maxy);
                    miny = min(j, miny);
                }
            }
        }
    }

    for(int i = minx; i<=maxx; i++)
    {
        for(int j = miny; j<=maxy; j++)
        {
            cout << result[i][j];
        }
        cout << "\n";
    }
    return 0;
}

입력받은 배열과 결과값을 담을 배열 2개를 선언해준다.

 

입력받은 배열을 기준으로 해당 좌표가 섬이고, 해당 좌표 기준 동서남북 방향으로 섬이 있는지 없는 지를 확인하여 섬의 갯수가 2개 이상이면 해당 섬은 잠기지 않는다.

따라서 해당 섬을 결과값을 담을 배열에 저장해준다.

 

이때 좌표값 x, y (i, j)을 저장하는데, 최솟값과 최대값을 따로 저장하여 범위를 체크해준다.