Notice
Recent Posts
Recent Comments
Link
01-12 10:29
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

AI 전문가가 되고싶은 사람

[BOJ] 1051 : 숫자 정사각형 (Python) 본문

알고리즘 공부

[BOJ] 1051 : 숫자 정사각형 (Python)

Kimseungwoo0407 2024. 10. 24. 15:54

문제

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