본문 바로가기
Algorithm

[구현/브루트포스] 백준 1051 숫자 정사각형 - 파이썬(Python)

by jangThang 2022. 8. 15.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1051번: 숫자 정사각형

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

    www.acmicpc.net

     

     

    2. 문제 풀이

     N, M 크기의 숫자 직사각형이 주어집니다. 1~9까지의 숫자가 나열된 직사각형에서 네 모퉁이가 모두 같은 가장 큰 정사각형의 넓이를 구해야 합니다.

     

    2022.01.16 - [Algorithm] - [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

     

    [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

    [ Contents ] 1. 브루트 포스란?  Brute(짐승 같은, 난폭한) + Force(힘, 폭력)의 합성어입니다. 무식하게 푸는 기법으로, '노가다'에 가까운 접근법입니다. 모든 경우의 수를 시험해보며 문제를 해결합니

    star7sss.tistory.com

     별다른 방법이 없습니다. (0, 0)부터 (N-1, M-1)까지 순회하며 네 모퉁이가 같은 정사각형이 있는지 탐색합니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    # 입력
    N, M = map(int, input().split())  # 가로, 세로
    square = []
    for _ in range(N):
        square.append(list(input()))
    
    # 가장 큰 정사각형 찾기
    size = min(N, M)
    for k in range(size, 0, -1):
        for i in range(N):
            for j in range(M):
                # 직사각형 범위 안이면서, 정사각형이면 출력
                if ((i + k) < N) and ((j + k) < M) and (square[i][j] == square[i][j + k] == square[i + k][j] == square[i + k][j + k]):
                    print((k+1)**2)
                    exit()
    # 정사각형이 없으면 1 출력
    else:
        print(1)

     

     정사각형의 최대 크기는 (N, M) 중 작은 변의 길이로 결정됩니다. 작은 변의 길이부터 시작해서 1씩 줄여가며, (0,0)부터 (N-1, M-1)까지 네 모퉁이가 같은 정사각형이 있는지 탐색합니다.

     정사각형을 찾으면 바로 출력하고 탐색을 종료합니다. 만약 없다면, 최소 크기인 1를 출력합니다.

     

    star가 되고나서 Tistory

    반응형

    댓글