문제링크:https://www.acmicpc.net/problem/2140
전형적인 구현문제입니다.
모서리의 숫자들이 주어질 때 해당 지뢰의 최대갯수를 찾는 문제였습니다.
생각해보면 최대개수이기때문에 지뢰가 있을 수 없는 장소들만 찾아주면 됩니다.
저는 #위치를 탐색하면서 주변(8방향)에 0이 포함되어있으면 해당 #은 지뢰가 없다고 표시해주는 방법으로 해결하였습니다.
그리고 0이 없다면 해당 위치는 지뢰가 있는것이고 주변(8방향)값들은 값을 1씩 낮춰줌으로써 구현하였습니다.
#include <iostream>
#include <string>
using namespace std;
int n = 0, result = 0;
string arr[101];
int y_ar[8] = {-1,-1,0,1,1,1,0,-1};
int x_ar[8] = {0,1,1,1,0,-1,-1,-1};
// 규칙을 보다보면 8방향에 0이 있는 경우에만 폭탄이 없고 나머지는 폭탄이 있다고 가정
int main() {
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
for (int i = 1; i < n - 1; i++)
for (int j = 1; j < n - 1; j++) {
bool jud = true;
for (int u = 0; u < 8; u++) {
int y = i + y_ar[u];
int x = j + x_ar[u];
if (arr[y][x] == '0') {
arr[i][j] = ' ';
jud = false;
}
}
if (jud == true) {
for (int u = 0; u < 8; u++) {
int y = i + y_ar[u];
int x = j + x_ar[u];
if ('0' < arr[y][x] && arr[y][x] <= '3') {
arr[y][x] -= 1;
}
}
}
}
for (int i = 1; i < n - 1; i++)
for (int j = 1; j < n - 1; j++)
if (arr[i][j] == '#') result++;
cout << result << endl;
return 0;
}
'알고리즘 > 구현' 카테고리의 다른 글
[백준] 5549-행성 탐사(C++) (0) | 2020.06.14 |
---|---|
[백준] 1043-거짓말(C++) (0) | 2020.06.08 |
[백준] 6416-트리인가?(C++) (0) | 2020.05.18 |
[백준] 2504-괄호의 값(C++) (0) | 2020.05.17 |
[백준] 2194-유닛 이동시키기(C++) (0) | 2020.05.08 |