1. 문제
1051번: 숫자 정사각형
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행
www.acmicpc.net
2. 해결방법
- 완전 탐색을 이용했다 ! N,M은 50보다 작거나 같은 자연수이다. 그럼 N*M정사각형 좌표 하나씩을 다 탐색해봤자 25000~
완전 탐색을 하기엔 충분한 숫자라고 판단했다.
- 우선 사각형을 2중 리스트로 입력받는다.
- k(사각형 길이 탐색) 변수를 두고 i,j(사각형 좌표)에서 (i, j) , (i,j+k) , (i+k, j), (i+k, j+k)가 같은 k를 탐색한다.
- 가장 큰 k로 계속 side 갱신 !!
3. 코드
n,m = map(int,input().split())
square = [list(input()) for _ in range(n)]
side = 0
for k in range(min(n, m), 0, -1):
for i in range(n-k):
for j in range(m-k):
if square[i][j] == square[i][j+k] == square[i+k][j] == square[i+k][j+k]:
side = max(side,k+1)
if side !=0:
print((side)**2)
else:
print(1)
아직 코드가 마무리까지 부드럽진 않은 것 같다! 계속 문제로 연습해야겠다 ..
'Koala - 10기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 10974번 모든 순열 (0) | 2023.03.10 |
---|---|
[백준/C++] 9663 : N-Queen (0) | 2023.03.10 |
[Programmers/Python] 단어 변환 (0) | 2023.03.06 |
[백준/python] 1895번 : 필터 (0) | 2023.03.06 |
10기 코딩테스트 스터디 출석부 (0) | 2023.03.04 |