Dev.baelanche

[백준 5212] 지구 온난화 본문

Data Structure & Algorithm/PS - JAVA

[백준 5212] 지구 온난화

baelanche 2019. 4. 11. 23:00
반응형

 

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