728x90
🔗 Problem Link
https://www.acmicpc.net/problem/1025
❔Thinking
- 주어진 표에서, 일정한 간격으로 이동하며 숫자를 선택해 완전 제곱수를 만든다.
- 만들 수 있는 완전 제곱수 중 가장 큰 수를 반환한다. 완전 제곱수를 만들 수 없는 경우 -1을 반환한다.
- 완전 제곱수는 어떤 정수를 제곱한 수이다.
💻Solution
import sys, math
input = sys.stdin.readline
N, M = map(int, input().split())
board = [list(input().rstrip()) for _ in range(N)]
def check(num: int):
return math.isqrt(num) ** 2 == num
answer = set()
for row_k in range(N+1):
for col_k in range(M+1):
if row_k == 0 and col_k == 0:
continue
for i in range(N):
for j in range(M):
for dr, dc in [(1, 1), (1, -1), (-1, 1), (-1, -1)]:
tmp_num = []
start_i, start_j = i, j
while 0 <= start_i < N and 0 <= start_j < M:
tmp_num.append(board[start_i][start_j])
num = int(''.join(tmp_num))
if check(num):
answer.add(num)
start_i += dr * row_k
start_j += dc * col_k
print(max(answer, default=-1))
🗝️keypoint
- 일정한 간격이란 등차수열을 말하며, 9x9 표이기 때문에 모든 경우의 확인이 가능하다.
- 행과 열의 이동 간격이 모두 0인 경우, 이동이 불가능하기 때문에 넘어가야 한다.
'코딩테스트 > Python' 카테고리의 다른 글
[Baekjoon] 1062. 가르침 (0) | 2025.02.02 |
---|---|
[Programmers] Level 2. 양궁대회 (1) | 2025.01.31 |
[Programmers] Level 2. 혼자 놀기의 달인 (0) | 2025.01.28 |
[Baekjoon] 1202. 보석 도둑 (0) | 2025.01.28 |
[Programmers] Level 2. 혼자서 하는 틱택토 (0) | 2025.01.24 |