[Python - 1051] 숫자 정사각형 (S3)

2024. 6. 17. 12:03·알고리즘 연습/백준

문제

1051번: 숫자 정사각형

문제
문제
문제

문제 이해

  • N * M 크기의 직사각형 (N : 세로, M : 가로)
  • 꼭짓점에 쓰여 있는 수가 모두 같고, 크기가 가장 큰 정사각형을 찾아라

풀이

직사각형의 숫자를 2차원 리스트로 저장한 후 모든 숫자를 순회하며, 조건에 맞는 정사각형을 찾도록 구현해 보자.
시간제한이 2초이며, N, M <= 50으로 넉넉한 시간을 가지고 있다. 그래서 다소 시간 복잡도가 높더라도 올바르게 작동만 한다면 정답을 받을 수 있을 것이라 생각했다.
  1. 2차원 리스트 형태로 숫자를 입력
  2. result (반환해 줄 직사각형의 크기)를 1로 초기화
  3. 첫 숫자부터 차례로 순회
    1. 가로로 진행하며 같은 숫자가 있는지 확인
    2. 같은 숫자가 없다면, 다음 숫자로 넘어감 (M보다 작을 때까지 진행)
    3. 같은 숫자가 있다면, 길이를 구해 세로 아래에 같은 숫자가 존재하는지 확인 (N보다 작을 경우)
  4. result를 갱신하며 최댓값을 반환

코드

  • left_top을 지정한 뒤 해당 숫자로 이루어진 정사각형이 존재하는지 확인
  • 모든 숫자를 순회하며, 같은 숫자가 있다면 정사각형인지 모두 확인
  • 정확하지는 않지만, 시간 복잡도가 O (N^2 * M) 정도로 복잡함
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
rec = [input().rstrip() for _ in range(n)]

result = 1

for i in range(n):
    for j in range(m):
        left_top = rec[i][j]
        for k in range(j + 1, m):
            if left_top == rec[i][k]:
                diff_ind = k - j
                if i + diff_ind < n and left_top == rec[i + diff_ind][j] and left_top == rec[i + diff_ind][k]:
                    if (diff_ind + 1) ** 2 > result:
                        result = (diff_ind + 1) ** 2

print(result)

'알고리즘 연습 > 백준' 카테고리의 다른 글

[Python - 1926] 그림 (S1)  (0) 2024.06.28
[Python - 1012] 유기농 배추 (S2)  (0) 2024.06.19
[Python - 1049] 기타줄 (S4)  (0) 2024.06.13
[Python - 1026] 보물 (S4)  (0) 2024.06.13
[Python - 17299] 오등큰수 (G3)  (0) 2024.05.24
'알고리즘 연습/백준' 카테고리의 다른 글
  • [Python - 1926] 그림 (S1)
  • [Python - 1012] 유기농 배추 (S2)
  • [Python - 1049] 기타줄 (S4)
  • [Python - 1026] 보물 (S4)
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[Python - 1051] 숫자 정사각형 (S3)
상단으로

티스토리툴바