BOJ 5212 지구 온난화
-
변수
char[][] map //주어지는 섬의 모양 int[] line //출력할 영역 설정
-
로직
-
X일 경우 4방향 중에 2방향 이상이 X면 X으로 변경
-
배열의 상하좌우 확인하면서 출력할 영역 설정하기
-
-
코드
package com.ssafy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_5212_지구온난화_201229 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
char[][] map = new char[R][C];
char[][] ans = new char[R][C];
for (int i = 0; i < R; i++) {
char[] c = br.readLine().toCharArray();
map[i] = c;
}
for (int i = 0; i < ans.length; i++) {
Arrays.fill(ans[i], '.');
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if(map[i][j] == 'X')
checkSea(i, j, map, ans);
}
}
int[] line = removeLine(ans);
for (int i = line[0]; i <= line[1]; i++) {
for (int j = line[2]; j <= line[3]; j++) {
System.out.print(ans[i][j]);
}
System.out.println();
}
}
private static int[] removeLine(char[][] ans) {
int[] line = new int[4];
for (int i = 0; i < ans.length; i++) {
boolean isSea = true;
for (int j = 0; j < ans[i].length; j++) {
if(ans[i][j] == 'X') {
isSea = false;
break;
}
}
if(!isSea) {
line[0] = i;
break;
}
}
for (int i = ans.length-1; i >= 0; i--) {
boolean isSea = true;
for (int j = 0; j < ans[i].length; j++) {
if(ans[i][j] == 'X') {
isSea = false;
break;
}
}
if(!isSea) {
line[1] = i;
break;
}
}
for (int i = 0; i < ans[0].length; i++) {
boolean isSea = true;
for (int j = 0; j < ans.length; j++) {
if(ans[j][i] == 'X') {
isSea = false;
break;
}
}
if(!isSea) {
line[2] = i;
break;
}
}
for (int i = ans[0].length -1 ; i >= 0; i--) {
boolean isSea = true;
for (int j = 0; j < ans.length; j++) {
if(ans[j][i] == 'X') {
isSea = false;
break;
}
}
if(!isSea) {
line[3] = i;
break;
}
}
return line;
}
static int[] dr = {-1, 1, 0, 0};
static int[] dc = {0, 0, -1, 1};
private static void checkSea(int x, int y, char[][] map, char[][] ans) {
int cnt = 0;
for (int i = 0; i < dr.length; i++) {
int nx = x + dr[i];
int ny = y + dc[i];
if(nx <0 || ny < 0 || nx >= map.length || ny >= map[nx].length) continue;
if(map[nx][ny] == 'X')
cnt++;
}
if(cnt > 1)
ans[x][y] = 'X';
}
}
Leave a comment