[오늘의 문제] 최고의 33위치

shlim55·2025년 11월 23일

코딩테스트

목록 보기
184/223

출처: 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나 그 이상의 사이즈일땐 생각 못함 반복문 범위 어떻게 그렇게 설정해야할지 잘 몰랐음

profile
A Normal Programmer

0개의 댓글