백준(BOJ)

[Python/파이썬] - 백준(BOJ) 1025번 : 제곱수 찾기

phanre 2022. 5. 31. 10:56

https://www.acmicpc.net/problem/1025

 

1025번: 제곱수 찾기

첫째 줄에 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 표에 적힌 숫자가 1번 행부터 N번 행까지 순서대로 한 줄에 한 행씩 주어진다. 한 행에 적힌 숫자는 1번 열부터 M번 열까지 순서대로 주어지

www.acmicpc.net

 

등차수열의 공차를 설정해 완전탐색하여 set에 add하고

set에서 제곱수이면 현재 max값과 비교하여 저장하였다.

 

def make(y, x, dy, dx, num):
    yy = y + dy
    xx = x + dx
    if dy == 0 and dx == 0:
        made.add(num)
        return
    if 0 <= yy < n and 0 <= xx < m:
        num = num*10 + arr[yy][xx]
        make(yy, xx, dy, dx, num)
    made.add(num)


n, m = map(int,input().split())
arr = [list(map(int,input())) for _ in range(n)]
made = set()
for y in range(n):
    for x in range(m):
        for dy in range(-n, n):
            for dx in range(-m, m):
                make(y, x, dy, dx, arr[y][x])
answer = -1
for x in made:
    if x**0.5 == int(x**0.5):
        answer = max(answer, x)
print(answer)