[プログラマー]Kaka friends彩本


こんにちは。


MINDOLです
で週末休みに投稿しようと思っていたのですが、未明に問題が解決したのでアップしました.
直接問題を見よう

ココアピンク本


質問リンク


上下左右に接続されているエリアをチェックすればいいです.
再帰関数を使って上下左右に接続されているエリアを検索し続ければいいのでしょうか?
難しくないです.すぐコードを見ます.
class Solution {
	int[][] map;	// 탐색 체크용 배열
	int size = 0;	// 영역 크기
	int width;		// 그림 가로 길이
	int height;		// 그림 세로 길이

	void parse(int x, int y, int elem, int[][] picture) {	// 영역 탐색
		if (map[x][y] != 0)	// 탐색한적 있으면 종료
			return ;
		size++;
		map[x][y] = 1;	// 탐색 체크표시
		if (x+1 < width && picture[x+1][y] == elem)	// 오른쪽 탐색
			parse(x+1, y, elem, picture);
		if (x-1 >= 0 && picture[x-1][y] == elem)	// 왼쪽 탐색
			parse(x-1, y, elem, picture);
		if (y+1 < height && picture[x][y+1] == elem)	// 위 탐색
			parse(x, y+1, elem, picture);
		if (y-1 >= 0 && picture[x][y-1] == elem)	// 아래 탐색
			parse(x, y-1, elem, picture);
	}

	public int[] solution(int m, int n, int[][] picture) {
		int number = 0;
		int maxsize= 0;
		width = m;
		height = n;
		map = new int[width][height];
		for (int x=0; x<width; x++) {	// 탐색
			for (int y=0; y<height; y++) {
				if (picture[x][y] != 0 && map[x][y] == 0) {
					size = 0;
					number++;
					parse(x, y, picture[x][y], picture);
					if (size > maxsize)	// 최대 크기 저장
						maxsize = size;
				}
			}
		}
		int[] answer = {number, maxsize};
		return answer;	// 영역 개수와 최대 크가 반환
	}
}
昨日はあまり遅く寝なかったので、遅く起きました.
今は週末ですから、よく勉強して、ギターをよく練習しなければなりません.今度は賢会の後輩と二人の曲を練習することにしました.
これで終了

皆さん、こんにちは