백준 1051 c : 구현

magicdrill·2025년 2월 13일
0

백준 문제풀이

목록 보기
550/654

백준 1051 c : 구현

c언어 동적할당을 공부를 잘 안하고 넘어가서 사용하지 못했다.
문자열과 동적배열을 다시 공부하고 풀이해보겠다.

#include <stdio.h>

#pragma warning(disable:4996)

void input_data(int *N, int *M, int box[51][51]) {
	int i, j;
	char str[51];

	scanf("%d", N);
	scanf("%d", M);

	for (i = 0; i < *N; i++) {
		scanf("%s", str);
		for (j = 0; j < *M; j++) {
			box[i][j] = str[j] - '0';
		}
	}

	return;
}

int find_answer(int N, int M, int box[51][51]) {
	int i, j, k;
	int max = 1;
	int current_num, length, new_square;

	for (i = 0; i < N; i++) {
		for (j = 0; j < M; j++) {
			current_num = box[i][j];//현재 숫자
			printf("(%d, %d) = %d\n", i, j, current_num);
			for (k = j + 1; k < M; k++) {
				if (current_num == box[i][k]) {//현재 숫자와 같은 숫자가 발견
					length = k - j;
					printf("같은 숫자 찾음 : length = %d => ", length);
					if ((i + length < N) && (j + length < M) 
						&& current_num == box[i + length][j]
						&& current_num == box[i + length][j + length])
					{
						new_square = (length + 1) * (length + 1);
						if (max < new_square) {
							max = new_square;
						}
						printf("현재 넓이 : %d", (length + 1) * (length + 1));
					}
					printf("\n");
				}
			}
		}
	}

	return max;
}

int main(void) {
	int N, M;
	int box[51][51] = { 0 };

	input_data(&N, &M, box);
	printf("%d\n", find_answer(N, M, box));

	return 0;
}

0개의 댓글