Koala - 5기/코딩테스트 준비 스터디

[BOJ / python] 1051번: 숫자 정사각형

pcw 2022. 1. 15. 15:17

https://www.acmicpc.net/problem/1051

 

1051번: 숫자 정사각형

N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행

www.acmicpc.net

 

문제

 

풀이

첫번째 줄에 얻은 값들을 num이라는 리스트에 저장하고, 두번째 줄부터 입력되는 정사각형의 각 숫자들을 rec라는 2차원 리스트를 생성하여 값을 저장한다. 네 꼭짓점의 수가 모두 같은 가장 큰 정사각형의 크기를 출력해야 하므로, 해당 정사각형 내에서 만들 수 있는 가장 큰 정사각형 변의 길이에서 시작하여 변의 길이를 하나씩 줄여가는 반복문을 만든다.

반복문을 사용하여 위와 같은 방식으로 정사각형의 위치를 움직여가며 해당 정사각형의 네 꼭짓점의 숫자를 비교한다. 만약 네 꼭짓점의 숫자가 모두 같을 경우, 해당 변의 길이를 제곱한 값을 계산하여 정사각형의 크기를 출력하도록 한다.

코드

num=[*map(int,input().split())]
rec=[]
max=0
for i in range(num[0]):
  rec.append(input())
if num[0]>num[1]:
  min=num[1]
else:
  min=num[0]
for i in range(min,0,-1):
  for y in range(num[1]-i+1):
    for x in range(num[0]-i+1):
      if (rec[x][y]==rec[x+i-1][y]==rec[x][y+i-1]==rec[x+i-1][y+i-1]):
        if i*i>max:
          max=i*i
print(max)

결과