※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 5212번 문제인 지구 온난화이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/5212
5212번: 지구 온난화
첫째 줄에 지도의 크기 R과 C (1 ≤ R, C ≤ 10)가 주어진다. 다음 R개 줄에는 현재 지도가 주어진다.
www.acmicpc.net
주어지는 지도의 각 땅을 살펴보면서 해당 땅이 50년 뒤에 사라지는지의 여부를 저장해두자. 50년 뒤에 사라지는 모든 땅을 찾았다면 해당 땅을 물에 잠긴 것으로 처리해 문제를 해결할 수 있다.
출력해야 하는 지도의 범위는 'X'가 등장하는 첫 행부터 'X'가 등장하는 마지막 행까지, 'X'가 등장하는 첫 열부터 'X'가 등장하는 마지막 열까지로 표현할 수 있다는 점을 관찰하자. 해당하는 각 행과 열을 구해 답을 출력해주자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int R, C;
string board[12];
int dr[4] = { 1,-1,0,0 };
int dc[4] = { 0,0,1,-1 };
vector<pair<int, int>> vec;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> R >> C;
for (int c = -2; c < C; c++) board[0] += '.';
for (int r = 1; r <= R; r++) {
cin >> board[r];
board[r] = "." + board[r] + ".";
}
board[R + 1] = board[0];
for (int r = 1; r <= R; r++) {
for (int c = 1; c <= C; c++) {
if (board[r][c] == 'X') {
int cnt = 0;
for (int i = 0; i < 4; i++) {
int rr = r + dr[i], cc = c + dc[i];
if (board[rr][cc] == '.') cnt++;
}
if (cnt > 2) vec.emplace_back(make_pair(r, c));
}
}
}
for (auto& p : vec) board[p.first][p.second] = '.';
int R1 = 0, R2 = R + 1, C1 = 0, C2 = C + 1;
while (1) {
bool chk = 0;
for (int c = 0; c <= C + 1; c++) {
if (board[R1][c] == 'X') chk = 1;
}
if (chk) break;
R1++;
}
while (1) {
bool chk = 0;
for (int c = 0; c <= C + 1; c++) {
if (board[R2][c] == 'X') chk = 1;
}
if (chk) break;
R2--;
}
while (1) {
bool chk = 0;
for (int r = 0; r <= R + 1; r++) {
if (board[r][C1] == 'X') chk = 1;
}
if (chk) break;
C1++;
}
while (1) {
bool chk = 0;
for (int r = 0; r <= R + 1; r++) {
if (board[r][C2] == 'X') chk = 1;
}
if (chk) break;
C2--;
}
for (int r = R1; r <= R2; r++) {
for (int c = C1; c <= C2; c++) {
cout << board[r][c];
}
cout << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 11288 // C++] Ether's Encryption (0) | 2022.12.13 |
---|---|
[BOJ 26307 // C++] Correct (0) | 2022.12.13 |
[BOJ 11289 // C++] Boolean Postfix (0) | 2022.12.13 |
[BOJ 24085 // C++] 希少な数 (Rare Number) (0) | 2022.12.13 |
[BOJ 11291 // C++] Alicia's Afternoon Amble (0) | 2022.12.13 |