https://www.acmicpc.net/problem/5212
5212번: 지구 온난화
첫째 줄에 지도의 크기 R과 C (1 ≤ R, C ≤ 10)가 주어진다. 다음 R개 줄에는 현재 지도가 주어진다.
www.acmicpc.net
package BOJ.simulation;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_5212 {
private static final char EARTH = 'X';
private static final char SEA = '.';
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int m = stoi.apply(st.nextToken());
char[][] map = new char[n][m];
for(int i = 0 ; i < n ; i++){
String str = br.readLine();
for(int j = 0 ; j < m ; j++){
map[i][j] = str.charAt(j);
}
}
cal(map,n,m);
}
private static final int[] DY = {-1,0,1,0};
private static final int[] DX = {0,1,0,-1};
private static void cal(char[][] map, int n, int m) {
boolean[][] check = new boolean[n][m];
int minY = n;
int minX = m;
int maxY = 0;
int maxX = 0;
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < m ; j++){
if(map[i][j] == SEA){
continue;
}
int cnt = 0;
for(int k = 0 ; k < 4; k++){
int ny = i + DY[k];
int nx = j + DX[k];
if(nx < 0 || nx >= m || ny < 0 || ny >= n){
cnt++;
continue;
}
if(map[ny][nx] == SEA){
cnt++;
}
}
if(cnt >= 3){
check[i][j] = true;
}else{
minY = Math.min(minY,i);
maxY = Math.max(maxY,i);
minX = Math.min(minX,j);
maxX = Math.max(maxX,j);
}
}
}
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < m ; j++){
if(check[i][j]){
map[i][j] = SEA;
}
}
}
for(int i = minY ; i <= maxY ; i++){
for(int j = minX ; j <= maxX ; j++){
System.out.print(map[i][j]);
}
System.out.println();
}
}
}
'알고리즘' 카테고리의 다른 글
백준 21317번 징검다리 건너기 (JAVA) (0) | 2023.02.23 |
---|---|
백준 17204번 죽음의 게임 (JAVA) (0) | 2023.02.22 |
백준 1197번 최소 스패닝 트리 (JAVA) (0) | 2023.02.20 |
프로그래머스 숫자 변환하기 (JAVA) (0) | 2023.02.19 |
프로그래머스 카드 뭉치(JAVA) (0) | 2023.02.18 |