백준 1051번 : 숫자 정사각형 (python)

Maru·2022년 7월 23일
1

1. 문제

2. 내 아이디어

  • N과 M 저장 후, 둘 중 더 작은 값을 s에 저장

  • 찾은 정사각형은 아무리 커도 한 변이 s보다 클 수 없다

  • 정사각형을 2차원 배열에 저장하기

  • 만약 s가 3이라면? 한 변의 길이가 3, 2, 1인 순으로 탐색하기

  • 발견한다면 그 값의 제곱을 출력

3. 내 코드

  • 한계 : 정리를 어케 해야될지 모르겠다.
  • 함수를 만들 생각을 못했던 것 같다.
  • 완전 탐색을 하면 안되는 줄 알고 만들었더니..! ㅠㅠ 너무 어려워졌다...

N, M = map(int,input().split())
temp = [list(input()) for _ in range(N)]

box=[]
for i in range(N):
    box.append(list(map(int, temp[i]))) 

m = min(N,M) # 더 큰 값 찾기

count = 0

while count < (N-1):
    for i in range(N):
        for j in range(M):
            if box[i][j] == box[i][j+m]
    
    

4. 다른 사람 코드

def find_squre(s):
    for i in range(N-s+1): //for j in range(M-s+1): //if numbers[i][j] == numbers[i][j+s-1] == numbers[i+s-1][j] == numbers[i+s-1][j+s-1]:
                return True

    return False


N, M = map(int, input().split())
numbers = [list(map(int, list(input()))) for _ in range(N)]

size = min(N,M)

# 최대 크기부터 하나씩 줄여가며 시작
for k in range(size, 0, -1):
    # 네 꼭지점의 크기가 같은 정사각형을 찾았으면 True를 받아 넓이를 출력해주고 break
    if find_squre(k):
        print(k**2)
        break

5. 개념

  • for i in range(start, stop, step)
  • start : 시작 숫자
  • stop : 끝나는 숫자 -1
  • step : 숫자의 간격을 나타낸다 (음수 가능, default는 1)
range(1, 11) 
# 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

range(0, 20, 2)
# 0, 2, 4, 6, 8, 10, 12, 14, 16, 18
profile
함께 일하고 싶은 개발자

0개의 댓글