[프로그래머스] 카카오 프렌즈 컬러링북

안녕하세요

민돌입니다.

주말에는 포스팅을 쉬려고 했는데, 새벽에 풀어 둔 문제가 있어서 올립니다.

바로 문제 보시죠.


카카오 프렌트 컬러링북

문제 링크

상하좌우로 연결된 영역을 확인하면 되는 문제입니다.

재귀함수를 사용해서 상하좌우에 연결된 영역을 계속 탐색하면 되겠죠?

어렵지 않으니 바로 코드를 보겠습니다.


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;	// 영역 개수와 최대 크가 반환
	}
}

어제 별로 늦게잔거 같지도 않은데, 완전 늦게일어났습니다.
이제 주말이니 공부는 쉬엄쉬엄하고, 기타연습이나 해야겠어요. 이번에 가현회 후배와 듀오로 곡 연습하기로 했거든요.

포스팅은 여기서 마치겠습니다.

안녕~

좋은 웹페이지 즐겨찾기