반응형
포인트
1. 구현을 잘 할 수 있는가?
2. 맵을 바꾸는 방법을 잘 이해를 할 필요가 있다.
🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다.
#include <iostream>
#include <string>
using namespace std;
int map[200][200]; // 빈 칸: 0, 폭탄: 터지기까지 남은 시간
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
int main() {
int n, m, l;
cin >> n >> m >> l;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
for (int j = 0; j < m; j++) {
if (s[j] == '.') {
map[i][j] = 0;
}
else {
map[i][j] = 2; // 처음 1초 동안은 아무 것도 하지 않고 시간만 가기 때문에, 2를 넣는다.
}
}
}
for (int t = 2; t <= l; t++) {
if (t % 2 == 0) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] == 0) {
map[i][j] = 3; // 폭탄이 아닌 곳에 폭탄 설치
}
else if (map[i][j] > 0) {
map[i][j] -= 1; // 폭탄인 곳은 시간이 흐름
}
}
}
}
else {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] == 1) {
// 1초 남은 폭탄은 지금 터지는 폭탄
map[i][j] = 0;
for (int k = 0; k < 4; k++) {
int x = i + dx[k];
int y = j + dy[k];
if (0 > x || x >= n || 0 > y || y >= m) continue;
if (map[x][y] != 1) {
// 인접한 칸이 1초 남은 폭탄이 아니면, 이번에 터지는 폭탄이 아님 또는 빈 칸
map[x][y] = 0;
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] > 0) {
map[i][j] -= 1;
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] == 0) {
cout << '.';
}
else {
cout << 'O';
}
}
cout << '\n';
}
return 0;
}
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] c++ cpp 두 개 뽑아서 더하기 (0) | 2020.10.20 |
---|---|
[알고리즘] c++ cpp 다리 만들기 (0) | 2020.10.17 |
[알고리즘] 퇴사 (0) | 2020.10.15 |
[알고리즘] 2048 (Easy) (0) | 2020.10.15 |
[알고리즘] cpp c++ 다리 만들기2 (0) | 2020.10.14 |
댓글