※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts