-
백준(BOJ) 16918번 봄버맨알고리즘 풀이/백준(Boj) 2019. 12. 19. 14:37
문제 : https://www.acmicpc.net/problem/16918
16918번: 봄버맨
첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.
www.acmicpc.net
풀이 :
v벡터 배열에는 폭탄 여부 , 폭탄 시간을 넣어서 풀이하였다.
폭탄 설치는 짝수 시간에만 해주어야 하고 터뜨릴 때에는 기존 터뜨릴 좌표를 0으로 만들 수 있기
때문에 temp라는 복사된 배열을 이용하였다.
코드( C++ )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <iostream> #include <string> #include <vector> using namespace std; const int dy[4] = { 1,-1,0,0 }; const int dx[4] = { 0,0,1,-1 }; string a[200]; vector<vector<pair<int,int>>> v; int r, c, n; int main() { cin >> r >> c >> n; for (int i = 0; i < r; ++i) cin >> a[i]; v = vector < vector<pair<int, int>>>(r, vector<pair<int, int>>(c)); for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) { if (a[i][j] == '.') { v[i][j].first = 0; v[i][j].second = 0; } else { v[i][j].first = 1; v[i][j].second = 1; } } int time = 1; while (1) { if (time == n) break; time++; //폭탄들 cnt 해주기 for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) { if (v[i][j].first == 1 && v[i][j].second >= 0) v[i][j].second++; } //폭탄 설치 if (time % 2 == 0) { for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) if (v[i][j].first == 0) { v[i][j].first = 1; v[i][j].second = 0; } } vector<vector<pair<int, int>>> temp(v); //터뜨리기 for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) { if (v[i][j].second == 3) { temp[i][j].first = 0; temp[i][j].second = 0; for (int k = 0; k < 4; ++k) { int ny = i + dy[k]; int nx = j + dx[k]; if (!(0 <= ny && ny < r && 0 <= nx && nx < c)) continue; temp[ny][nx].first = 0; temp[ny][nx].second = 0; } } } v = temp; } for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { if (v[i][j].first == 0) { cout << '.'; } else { cout << 'O'; } } cout << "\n"; } return 0; } '알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글
백준(BOJ) 17822번 원판 돌리기 (0) 2019.12.23 백준(BOJ) 17143번 낚시왕 (0) 2019.12.19 백준 BOJ 13458번 시험 감독 (0) 2019.12.17 백준(BOJ) 12100번 2048 (Easy) (0) 2019.12.15 백준(BOJ) 17471번 게리맨더링 (0) 2019.12.15