Notice
Recent Posts
Recent Comments
Link
01-12 10:29
AI 전문가가 되고싶은 사람
[BOJ] 1051 : 숫자 정사각형 (Python) 본문
문제
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
해결 방안
- 가장 큰 정사각형 크기 구하기
- 직사각형 NxM이 주어졌을 때 더 작은 쪽이 가장 큰 정사각형의 크기다
- ex) N이 더 작다면 NxN이 가장 큰 정사각형 크기
- 좌상단을 기준으로 오른쪽, 아래, 대각선을 확인
- 좌상단 기준으로 (0,1), (1,0), (1,1)을 각각 더해서 그 값이 같은지를 확인
- 좌상단 좌표에서 세가지 값을 더했을때 범위가 안 벗어나는지 확인
- 값이 다 같을 경우 기존에 있던 값과 비교하여 큰 값을 max_square에 저장
N, M = map(int,input().split())
graph = []
for _ in range(N):
graph.append(list(map(int,input())))
max_square = 1
for i in range(N):
for j in range(M):
for k in range(1, min(N,M)):
if i+k < N and j+k < M:
if (graph[i][j] == graph[i + k][j] and graph[i][j] == graph[i][j + k] and graph[i][j] == graph[i + k][j + k]):
max_square = max(max_square, (k + 1) * (k + 1))
print(max_square)
문제 주소
https://www.acmicpc.net/problem/1051
'알고리즘 공부' 카테고리의 다른 글
[BOJ] 3085 : 사탕게임 (Python) (0) | 2024.10.25 |
---|---|
[BOJ] 2477 : 참외밭 (Python) (0) | 2024.10.22 |