Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 5212] 지구 온난화 본문
반응형
X 주변에 . 이 3개 이상이면 X 도 . 으로 치환이 된다.
지도 밖으로 나가도 바다로 취급하므로 인덱스 바깥도 . 으로 계산한다.
편의상 배열의 크기를 r+2, c+2 로 만들어서 외곽을 바다로 둘렀다.
a = new char[r+2][c+2];
배열을 . 으로 초기화 한 후 외곽을 제외하고 스캔 받았다.
for(int i=1; i<r+1; i++) {
String str = sc.next();
for(int j=1; j<c+1; j++) {
a[i][j] = str.charAt(j-1);
}
}
배열의 1,1 부터 r+1, c+1 까지 탐색한다. 상하좌우에 바다가 3개 이상이면 그 인덱스도 바다로 만든다.
인덱스 값이 바뀌면서 다음 인덱스에 영향을 줄 수 있기때문에 본래 배열을 복사한 인덱스에 대입했다.
public static void dfs(int x, int y) {
if(a[x][y] == '.') return;
int cnt = 0;
if(a[x-1][y] == '.') cnt++;
if(a[x][y-1] == '.') cnt++;
if(a[x][y+1] == '.') cnt++;
if(a[x+1][y] == '.') cnt++;
if(cnt >= 3)
b[x][y] = '.';
}
X 가 시작, 끝나는 행, 열의 정보를 무식한 방법으로 받았다....
int startRow = 0;
int endRow = 0;
int startColumn = 0;
int endColumn = 0;
for(int i=0; i<r+2; i++) {
for(int j=0; j<c+2; j++) {
if(b[i][j] == 'X' && startRow == 0) startRow = i;
if(b[i][j] == 'X') {
if(endRow < i)
endRow = i;
}
}
}
for(int i=0; i<c+2; i++) {
for(int j=0; j<r+2; j++) {
if(b[j][i] == 'X' && startColumn == 0) startColumn = i;
if(b[j][i] == 'X') {
if(endColumn < i)
endColumn = i;
}
}
}
받은 정보대로 출력만 해주면 끝!
public class Main {
static int r;
static int c;
static char[][] a;
static char[][] b;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
r = sc.nextInt();
c = sc.nextInt();
a = new char[r+2][c+2];
b = new char[r+2][c+2];
//배열 초기화
for(int i=0; i<r+2; i++) {
for(int j=0; j<c+2; j++) {
a[i][j] = '.';
}
}
//스캔
for(int i=1; i<r+1; i++) {
String str = sc.next();
for(int j=1; j<c+1; j++) {
a[i][j] = str.charAt(j-1);
}
}
//복사
for(int i=0; i<r+2; i++) {
for(int j=0; j<c+2; j++) {
b[i][j] = a[i][j];
}
}
//탐색
for(int i=1; i<r+1; i++) {
for(int j=1; j<c+1; j++) {
dfs(i, j);
}
}
int startRow = 0;
int endRow = 0;
int startColumn = 0;
int endColumn = 0;
for(int i=0; i<r+2; i++) {
for(int j=0; j<c+2; j++) {
if(b[i][j] == 'X' && startRow == 0) startRow = i;
if(b[i][j] == 'X') {
if(endRow < i)
endRow = i;
}
}
}
for(int i=0; i<c+2; i++) {
for(int j=0; j<r+2; j++) {
if(b[j][i] == 'X' && startColumn == 0) startColumn = i;
if(b[j][i] == 'X') {
if(endColumn < i)
endColumn = i;
}
}
}
for(int i=startRow; i<=endRow; i++) {
for(int j=startColumn; j<=endColumn; j++) {
System.out.print(b[i][j]);
}
System.out.println();
}
sc.close();
}
public static void dfs(int x, int y) {
if(a[x][y] == '.') return;
int cnt = 0;
if(a[x-1][y] == '.') cnt++;
if(a[x][y-1] == '.') cnt++;
if(a[x][y+1] == '.') cnt++;
if(a[x+1][y] == '.') cnt++;
if(cnt >= 3)
b[x][y] = '.';
}
}
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 2804] 크로스워드 만들기 (0) | 2019.04.12 |
---|---|
[백준 5533] 유니크 (0) | 2019.04.12 |
[백준 10539] 수빈이와 수열 (0) | 2019.04.11 |
[백준 5567] 결혼식 (0) | 2019.04.11 |
[백준 3053] 택시 기하학 (0) | 2019.04.10 |
Comments