-
[백준] 1051 - 숫자 정사각형알고리즘 2023. 5. 8. 16:53728x90
1. 문제
https://www.acmicpc.net/problem/1051
1051번: 숫자 정사각형
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행
www.acmicpc.net
2. 접근
1. 처음에는 모든 지점을 지나면서 가로, 세로, 대각선을 체크할 수 있는 각 함수를 만들어서 처리하려고 했다. ( 중복되는 코드도 길어지고, 오히려 복잡해서 틀렸다 )
2. min(n,m) 을 하는 이유는 정사각형의 특징 덕에 얻을 수 있던 힌트다 ( 4변의 길이가 같다! )
3. 그래서 k 만큼 벌어진거에 대해서 n,m을 벗어나지 않고 각 모서리가 같으면 배열(ans)에 정사각형의 넓이 값을 넣어준후 최댓값을 출력!
3. 풀이
# 1051 , 살버 4 import sys input = sys.stdin.readline n,m = map(int,input().split()) rect = [] for i in range(n): rect.append(list(map(int,input().rstrip()))) ans = [] check = min(n,m) for i in range(n): for j in range(m): for k in range(check): if (i+k) < n and (j+k) < m and rect[i][j] == rect[i+k][j] and rect[i][j] == rect[i][j+k] and rect[i][j] == rect[i+k][j+k]: ans.append((k+1)**2) print(max(ans))
'알고리즘' 카테고리의 다른 글
[백준] 3184 - 양 (1) 2023.05.10 [백준] 1325 - 효율적인 해킹 (1) 2023.05.08 [백준] 1080 - 행렬 (1) 2023.05.08 [백준] 1049 - 기타줄 (0) 2023.04.20 [백준] 1389 - 케빈 베이컨의 6단계 법칙 (0) 2023.04.14