출처: https://www.codetree.ai/ko/trails/complete/curated-cards/intro-best-place-of-33/description
NN 크기의 격자 정보가 주어집니다. 이때 해당 위치에 동전이 있다면, 1 없다면 0이 주어집니다. NN 격자를 벗어나지 않도록 3*3크기의 격자를 적절하게 잘 잡아서 해당 범위 안에 들어있는 동전의 개수를 최대로 하는 프로그램을 작성해보세요.
입력
첫번째 줄에는 격자의 크기를 나타내는 N이 주어집니다.
두번째 줄부터는 N개의 줄에 걸쳐 각자에 대한 정보가 주어집니다.
각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 0 또는 1로 이루어진
N개의 숫자로 나타내어지며 공백을 사이에 두고 주어집니다.
제한 조건
3<=N<=20
출력
N N 격자를 벗어나지 않으면서, 33 크기 격자 내에 들어올 수 있는 최대 동전의 수를 출력해주세요.
입력 예제
예제 1
입력
3
1 0 1
0 1 0
0 1 0
출력
4
예제 2
입력
5
0 0 0 1 1
1 0 1 1 1
0 1 0 1 0
0 1 0 1 0
0 0 0 1 1
출력
6
내가 한 풀이
n = int(input())
grid = [list(map(int, input().split())) for _ in range(n)]
# 최대 동전 수를 저장할 변수 초기화
max_coins = 0
# 1. 3x3 부분 격자의 시작점 (i, j)을 순회하는 외부 반복문
# 범위는 0부터 N-3까지 (N-2까지 반복)
# grid[i][j]가 3x3 격자의 좌측 상단 모서리가 됨
for i in range(n - 2):
for j in range(n - 2):
# 현재 3x3 격자의 동전 수를 저장할 변수 초기화
current_coins = 0
# 2. 현재 시작점 (i, j)을 기준으로 3x3 영역을 순회하는 내부 반복문
# 행: i부터 i+2까지, 열: j부터 j+2까지
for r in range(i, i + 3):
for c in range(j, j + 3):
# 동전이 있다면 (값이 1이라면) current_coins에 더함
# if grid[r][c] == 1:
# current_coins += 1
# 1 또는 0이므로, 바로 더하는 것이 더 효율적입니다.
current_coins += grid[r][c]
# 3. 최대 동전 수 업데이트
# 현재 3x3 영역의 동전 수가 지금까지의 최대값보다 크다면 업데이트
if current_coins > max_coins:
max_coins = current_coins
print(max_coins)
트러블 슈팅 맨첨에 case1은 맞췄는데 5*5나 그 이상의 사이즈일땐 생각 못함 반복문 범위 어떻게 그렇게 설정해야할지 잘 몰랐음