반응형
백준 Baekjoon 5212번 지구 온난화 - JAVA
문제 설명
입력받은 지도의 땅 주변의 바다의 수를 확인하여 3면이 바다인 경우 바다로 변경하고, 출력할 범위를 찾아 출력하면 되는 문제이다. 입력받은 지도에서 땅을 바다로 변경하는 경우 다른 땅의 주변 바다가 늘어나 별도의 배열을 만들어 사용해야 한다.
- 땅의 경우 주변 바다의 수를 검사 변경해야 하는 경우 변경
- 50년 후에도 땅인 경우 출력범위를 갱신
- 출력범위의 지도를 출력
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
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]; // 지도 입력
for (int i = 0; i < R; i++) {
map[i] = br.readLine().toCharArray();
}
int[] di = {0, 1, 0, -1};
int[] dj = {1, 0, -1, 0};
int minR = 10, minC = 10;
int maxR = 0, maxC = 0;
char[][] after = new char[R][C]; // 50년 후
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++) { // 4방향 탐색
int x = i + di[k];
int y = j + dj[k];
// 지도 밖인 경우에는 바다
if ((x == -1 || y == -1 || x == R || y == C) || map[x][y] == '.') {
cnt++;
}
}
if (cnt < 3) { // 3면 이하가 바다인 경우
after[i][j] = 'X';
minR = Math.min(minR, i); // 지도 출력 범위 갱신
minC = Math.min(minC, j);
maxR = Math.max(maxR, i);
maxC = Math.max(maxC, j);
} else {
after[i][j] = '.';
}
} else {
after[i][j] = '.';
}
}
}
StringBuilder answer = new StringBuilder(); // 출력
for (int i = minR; i <= maxR; i++) {
for (int j = minC; j <= maxC; j++) {
answer.append(after[i][j]);
}
answer.append("\n");
}
System.out.println(answer);
}
}
반응형
'알고리즘(Algorithm) > 백준(Baekjoon)' 카테고리의 다른 글
[백준 Baekjoon] 1389번 케빈 베이컨의 6단계 법칙 - JAVA (0) | 2021.11.19 |
---|---|
[백준 Baekjoon] 11479번 통나무 건너뛰기 - JAVA (0) | 2021.11.18 |
[백준 Baekjoon] 3077번 임진왜란 - JAVA (0) | 2021.11.17 |
[백준 Baekjoon] 16992번 로마 숫자 만들기 - JAVA (0) | 2021.11.16 |
[백준 Baekjoon] 5014번 스타트링크 - JAVA (0) | 2021.11.15 |