Algorithm/백준
백준 [5212] 지구 온난화 (자바)
youngjae-kim
2024. 6. 21. 15:15
728x90
반응형
문제
풀이
- 지도 배열을 돌면서 땅인 경우 해당 지점의 주변에 바다가 3~4면으로 둘러쌓였는지 확인한다.
- 3~4면이 바다여서 잠길 경우 '-'로 표시
- 해당 지점이 계속 땅일 경우 나중에 줄어든 지도를 그릴 좌표를 땅 기준으로 갱신해준다.
갱신된 좌표 범위의 지도를 출력
정답코드
package com.baekjoon.p5212;
import java.io.*;
import java.util.*;
public class Main {
static int R, C;
static char[][] map;
static int[] dr = { 1, 0, -1, 0 };
static int[] dc = { 0, 1, 0, -1 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
map = new char[R][C];
for (int i = 0; i < R; i++) {
String input = br.readLine();
for (int j = 0; j < C; j++) {
map[i][j] = input.charAt(j);
}
}
int sr = R, er = 0, sc = C, ec = 0;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (map[i][j] == 'X') {
int cnt = 0;
for (int k = 0; k < 4; k++) {
int nr = i + dr[k];
int nc = j + dc[k];
if (nr < 0 || nr >= R || nc < 0 || nc >= C) {
cnt++;
} else {
// 범위 안에 있는 경우
if (map[nr][nc] == '.') {
cnt++;
}
}
}
if (cnt >= 3) {
map[i][j] = '-';
}
}
if (map[i][j] == 'X') {
// 줄어든 지도 좌표 갱신
sr = Math.min(sr, i);
er = Math.max(er, i);
sc = Math.min(sc, j);
ec = Math.max(ec, j);
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = sr; i <= er; i++) {
for (int j = sc; j <= ec; j++) {
if (map[i][j] == 'X') {
sb.append(map[i][j]);
} else {
sb.append('.');
}
}
sb.append("\n");
}
System.out.println(sb);
}
}
728x90
반응형