문제
1051번: 숫자 정사각형
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행
www.acmicpc.net
알고리즘
- 반복문을 통해 모든 좌표를 확인한다.
- 현재 좌표에 쓰여 있는 수가 j 축에 또 있는지 확인한다.
- 똑같은 수가 있다면 두 좌표를 포함하는 정사각형 좌표가 범위 내에 있고 똑같은 수인지 확인한다.
- 똑같은 수라면 길이를 제곱하여 answer에 저장한다.
- answer에 최댓값을 출력한다.
코드
import sys
n, m = map(int, sys.stdin.readline().split())
graph = [list(map(int ,sys.stdin.readline().strip())) for _ in range(n)]
answer = []
for i in range(n):
for j in range(m):
target = graph[i][j] # 현재 꼭짓점에 쓰여 있는 수
# 반복문을 통해 j축에 target과 똑같은 수를 확인
for k in range(j, m):
# target과 똑같은 수가 있다면 정사각형 위치가 범위 내에 있고 똑같은 수가 있는지 확인
if graph[i][k] == target and i + k - j < n and k < m:
if graph[i + k - j][j] == target and graph[i + k - j][k] == target:
# 정사각형 위치에 모두 똑같은 수가 있다면 길이를 제곱
answer.append((k - j + 1) ** 2)
# 제일 큰 정사각형의 크기를 출력
print(max(answer))
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1057번(파이썬): 토너먼트 (0) | 2022.04.13 |
---|---|
[baekjoon] 백준 1052번(파이썬): 물통 (0) | 2022.04.12 |
[baekjoon] 백준 14247번(파이썬): 나무 자르기 (0) | 2022.04.10 |
[baekjoon] 백준 2615번(파이썬): 오목 (0) | 2022.04.10 |
[baekjoon] 백준 1780번(파이썬): 종이의 개수 (0) | 2022.04.09 |