반응형
- 알고리즘 분류 : 구현
- 사용 언어 : JAVA
- 문제 요점
- 땅 주위의 상하좌우에 인접한 바다가 3개 이상이면 녹는다.
- 주어진 지도의 범위 바깥은 바다로 쳐야한다.
- 땅이 녹으면 그에 맞게 범위도 줄어들어야한다.
소스 설명은 주석을 참고해주세요.
import java.util.*;
public class Main {
public static int R;
public static int C;
public static char [][] map;
public static char [][] tempMap;
public static final int[] dx = {0, 0, 1, -1};
public static final int[] dy = {1, -1, 0, 0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int R = sc.nextInt();
int C = sc.nextInt();
map = new char[R][C];
tempMap = new char[R][C];
sc.nextLine();
for(int i = 0 ; i < map.length ; i++) {
String s = sc.nextLine();
map[i] = s.toCharArray();
tempMap[i] = s.toCharArray();
}
sc.close();
for(int i = 0 ; i < map.length ; i++) {
for(int j = 0 ; j < map[i].length ; j++) {
if(map[i][j] == 'X') {
int count = 0;
for(int k = 0 ; k < dx.length ; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
if((nx>=0 && nx < R && ny >=0 && ny < C )){
if(map[nx][ny] == 'X') {
continue;
}
}
count++;
}
if(count >= 3) {
tempMap[i][j] = '.';
}
}
}
}
// 출력할 범위 구하기
int top = -1;
int left = -1;
int down = -1;
int right = -1;
int height = tempMap.length;
int width = tempMap[0].length;
// 위
for(int i=0; i<height; i++){
boolean check = false;
for(int j=0; j<width; j++){
if(tempMap[i][j] == 'X'){
top = i;
check=true;
break;
}
}
if(check){
break;
}
}
// 왼쪽
for(int i=0; i<width; i++){
boolean check = false;
for(int j=0; j<height; j++){
if(tempMap[j][i] == 'X'){
left = i;
check=true;
break;
}
}
if(check){
break;
}
}
// 아래
for(int i=height-1; i>=0; i--){
boolean check = false;
for(int j=0; j<width; j++){
if(tempMap[i][j] == 'X'){
down = i;
check=true;
break;
}
}
if(check){
break;
}
}
// 오른쪽
for(int i=width-1; i>=0; i--){
boolean check = false;
for(int j=0; j<height; j++){
if(tempMap[j][i] == 'X'){
right = i;
check=true;
break;
}
}
if(check){
break;
}
}
// 위에서 정한 범위 내에서 출력
StringBuilder sb = new StringBuilder();
int i = top;
while(i <= down){
int j = left;
while(j<=right){
sb.append(tempMap[i][j]);
j++;
}
sb.append("\n");
i++;
}
System.out.println(sb.toString());
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 5972번 : 택배배송 (JAVA) (0) | 2022.04.10 |
---|---|
[BAEKJOON] 7576번 : 토마토 (JAVA) (0) | 2022.04.07 |
[BAEKJOON] 9012번 : 괄호 (JAVA) (0) | 2022.03.27 |
[BAEKJOON] 15651번 : N과 M(3) (JAVA) (0) | 2022.03.23 |
[BAEKJOON] 15650번 : N과 M(2) (JAVA) (0) | 2022.03.22 |