4/5 스터디 문제

hyejun sang·2022년 4월 5일
0

알고리즘

목록 보기
14/28
post-thumbnail

1번 문제.
https://www.acmicpc.net/problem/1051
-> 숫자 정사각형

1-1번 문제 풀이 코드

import sys
# N x M 값 입력
n, m = map(int, sys.stdin.readline().split())
# 사각형 꼭짓점들의 값 입력
rect = [list(map(int, sys.stdin.readline().strip())) for _ in range(n)]
# N과 M 값에서 최솟값을 기준으로 정사각형이 최대가 될 수 있음
d = min(n, m)
# 정사각형의 최대값은 1부터 시작
max_size = 1

# i번째에서
for i in range(n):
    # j번째에서
    for j in range(m):
        # n, m 최솟값 중 최대 크기의 정사각형을 찾기 위해
        for k in range(d):
            # 만약 [i][j]번째의 값과 [i-k][j]번째 값과 
            #[i][j-k]번째 값과 [i-k][j-k]값이 같다면
            # 가장 큰 정사각형을 찾을 수 있다.
            if rect[i][j] == rect[i-k][j] == rect[i][j-k] == rect[i-k][j-k]:
                # k 값으로 생각했더니, 값이 전부 1씩 작게 나옴..
                max_size = max(max_size, (k+1)**2)

print(max_size)

=======================================================
답이... 나오는데 틀림

1-2번 문제 풀이 코드

import sys
# N x M 값 입력
n, m = map(int, sys.stdin.readline().split())
# 사각형 꼭짓점들의 값 입력
rect = [list(map(int, sys.stdin.readline().strip())) for _ in range(n)]
# N과 M 값에서 최솟값을 기준으로 정사각형이 최대가 될 수 있음
d = min(n, m)
# 정사각형의 최대값은 1부터 시작
max_size = 1

# i번째에서
for i in range(n):
    # j번째에서
    for j in range(m):
        # n, m 최솟값 중 최대 크기의 정사각형을 찾기 위해
        for k in range(d):
            # 만약 [i][j]번째의 값과 [i+k][j]번째 값과 
            #[i][j+k]번째 값과 [i+k][j+k]값이 같다면
            # 가장 큰 정사각형을 찾을 수 있다.
            if ((i + k) < n) and ((j + k) < m) and
            (rect[i][j] == rect[i][j + k] == rect[i + k][j] == rect[i + k][j + k]):
                # k 값으로 생각했더니, 값이 전부 1씩 작게 나옴..
                max_size = max(max_size, (k+1)**2)

print(max_size)

=======================================================
그냥 변경했더니... 된다..... 이유는 다음에 찾는걸로
오늘은 여기까지

0개의 댓글