CodingTest/Baekjoon

[baekjoon] 백준 1051번(파이썬): 숫자 정사각형

JunJangE 2022. 4. 11. 02:43

문제

 

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