[PS] BOJ_1992

최윤하·2022년 3월 6일
0

Problem Solving

목록 보기
3/12
post-thumbnail

BOJ_1992

💡 생각하자

먼저, 주어진 영상이 모두 0 또는 1로 되어있는지 판단하는 함수를 만든다.

만약 주어진 영상이 0과 1이 섞여있으면, 같은 수로 이루어진 영상이 나올 때 까지 4등분 한다.

💻 구현하자

  • 주어진 영상이 모두 같은 수로 이루어져 있는지 판단하는 함수
int check(int n, int start_i, int start_j) {
	int pivot = mat[start_i][start_j];

	for (int i = start_i;i < start_i + n;i++) {
		for (int j = start_j;j < start_j + n;j++) {
			if (mat[i][j] != pivot)
				return FALSE;
		}
	}
	printf("%d", pivot);
	return TRUE;
}

- pivot: 영상에서 첫번째 원소

  • 영상을 4등분하는 함수
void divideMat(int n, int start_i, int start_j) {
	int res = check(n, start_i, start_j);
	int next_size = n / 2;

	if (res == FALSE && n >= 2) { // exit condition
		printf("(");
		for (int i = start_i;i < start_i + n;i += next_size) {
			for (int j = start_j;j < start_j + n;j += next_size) {
				divideMat(next_size, i, j);
			}
		}
		printf(")");
	}
}

- 종료조건: 주어진 영상이 모두 같은 수로 이뤄져있거나(res = TRUE), 영상의 길이가 2보다 작은 경우(n < 2) 더이상 4등분 할 필요가 없다.

  • 초기 호출문
divideMat(n, 0, 0);  

💥 발전하자

  • 에러 및 해결
  1. divideMat() 내부의 반복문에서 아무생각없이 i=0, j=0부터 시작하여 무한루프가 발생했다. 주의하자!

📌 참고하자

나의 코드(Github)

0개의 댓글