티스토리 뷰

Algorithm

[백준] B1 5212 지구 온난화 (java)

코딩브론즈 2020. 12. 21. 23:23

www.acmicpc.net/problem/5212

 

5212번: 지구 온난화

첫째 줄에 지도의 크기 R과 C (1 ≤ R, C ≤ 10)가 주어진다. 다음 R개 줄에는 현재 지도가 주어진다.

www.acmicpc.net

 

풀이

 

1) 2차원 배열을 탐색하다가 X가 나오면 사방탐색을 해서 X의 갯수를 또다른 int형 2차원 배열에 담음

2) minR, minC, maxR, maxC 변수를 X가 나올때마다 갱신

3) 갯수가 2 이하면 전부 '.'으로 바꿈

4) 2번 범위만큼 출력

 

주의사항

 

1) 새로 2차원 배열을 생성하지 않고 하나만가지고 하기 어려움

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.StringTokenizer;

public class BJ_B1_5212_지구온난화 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokens;
	static int R,C,map2[][];
	static char map[][];
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		tokens = new StringTokenizer(input.readLine());
		R = Integer.parseInt(tokens.nextToken());
		C = Integer.parseInt(tokens.nextToken());
		map = new char[R][C];
		map2 = new int[R][C];
		for(int r=0; r<R; r++) {
			String line = input.readLine();
			for(int c=0; c<C; c++) {
				map[r][c] = line.charAt(c);
			}	
		}
		
		for(int r=0; r<R; r++) {
			for(int c=0; c<C; c++) {
				if(map[r][c] == 'X') {
					for(int d=0; d<4; d++) {
						int nr = r+dr[d];
						int nc = c+dc[d];
						if(isIn(nr, nc) && map[nr][nc] == 'X') {
							map2[r][c] ++;
						}
					}
				}
			}	
		}
		int minR = 10, minC = 10;
		int maxR = 0, maxC = 0;
		for(int r=0; r<R; r++) {
			for(int c=0; c<C; c++) {
				if(map2[r][c] < 2) {
					map[r][c] = '.';
				}else {
					if(maxR < r) {
						maxR = r;
					}
					if(maxC < c) {
						maxC = c;
					}
					if(minR > r) {
						minR = r;
					}
					if(minC > c) {
						minC = c;
					}
				}
			}	
		}
		for(int r=minR; r<=maxR; r++) {
			for(int c=minC; c<=maxC; c++) {
				System.out.print(map[r][c]);
			}	
			System.out.println();
		}
	}
	
	static boolean isIn (int r, int c) {
		return (r>=0 && c>=0 && r<R && c<C);
	}
	
	static int dr[] = {0,0,-1,1};
	static int dc[] = {-1,1,0,0};
	
	static String src =
			"3 10\r\n" + 
			"..........\r\n" + 
			"..XXX.XXX.\r\n" + 
			"XXX.......";
}

 

 

후기

 

머리가 안돌아가서 이상한데서 오래걸렸다.. 골드의 '빙산' 문제와 비슷한 문제이다. 생각해보니 그거 틀렸던 문젠데 다시 풀어봐야겠다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함