https://www.acmicpc.net/problem/1051
1. 분류
브루트 포스
2. 풀이
직사각형의 너비와 높이를 받아 내부의 정사각형 중 가장 큰 것을 구하는 문제이다.
네 모서리의 수가 같아야 정사각형으로 인정된다.
너비와 높이값이 최대 50이므로 O(n^4)이어도 풀 수가 있으므로 넉넉히 생각했다.
내부 정사각형을 하나하나 찾아가며 최대값을 뽑아내었다.
길이가 2인 정사각형부터 너비와 높이 중 작은 값(min)까지 검사했다.
내부에 for문이 2개 더 있는데 배열의 왼쪽 상단부터 우측 하단까지 일일이 방문하는 간단한 소스코드이다.
로직은 맞는데 계속 틀려서 곰곰히 생각을 해보니, 정사각형의 최소값을 0으로 주었기 때문이었다.
이런 실수는 특히나 조심해야겠다.
3. 소스코드
#include <cstdio> int main() { int n, m, min, a[51][51] = { 0 }; scanf("%d %d", &n, &m); min = n > m ? m : n; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%1d", &a[i][j]); int max = 1; for (int i = 1; i < min; i++) { for (int j = 0; j < n - i; j++) { for (int k = 0; k < m - i; k++) { if ((a[j][k] == a[j + i][k]) && (a[j + i][k] == a[j][k + i]) && (a[j][k + i] == a[j + i][k + i])) { max = max < (i + 1) ? (i + 1) : max; break; } } } } printf("%d\n", max * max); return 0; }
'알고리즘' 카테고리의 다른 글
BOJ [9465] 스티커 (0) | 2017.09.10 |
---|---|
BOJ [1915] 가장 큰 정사각형 (0) | 2017.09.09 |
BOJ [1182] 부분집합의 합 (0) | 2017.08.31 |
BOJ [9461] 파도반 수열 (0) | 2017.08.15 |
BOJ [11501] 이항 계수 2 (0) | 2017.08.15 |