Table of Contents
문제
[최고의 33위치]
풀러 가기
N * N 크기의 격자 정보가 주어집니다.
이때 해당 위치에 동전이 있다면 1, 없다면 0이 주어집니다.
N * N 격자를 벗어나지 않도록 3 * 3 크기의 격자를 적절하게 잘 잡아서 해당 범위 안에 들어있는 동전의 개수를 최대로 하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에는 격자의 크기를 나타내는 N이 주어집니다.
두 번째 줄부터는 N개의 줄에 걸쳐 격자에 대한 정보가 주어집니다.
각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 0또는 1로 이루어진 N개의 숫자로 나타내어지며 공백을 사이에 두고 주어집니다.
- 2 ≤ n ≤ 100
출력 형식
N * N 격자를 벗어나지 않으면서, 3 * 3 크기 격자 내에 들어올 수 있는 최대 동전의 수를 출력해주세요.
Constraints:
시간 제한: 1000ms
메모리 제한: 80MB
입출력 예제
입력:
3
1 0 1
0 1 0
0 1 0
출력:
4
입력:
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
풀이과정
1) 변수 선언, 입력값
2) 주어진 그리드를 3* 3 단위로 탐색하는 함수 생성
3) 3* 3 그리드 안의 1을 계산하는 메서드 생성
- 2)와 3)의 자리 바꾸기 ➡ 2)에서 3)을 호출하기 때문
4) 출력
1) 변수 선언, 입력값
이렇게 만들어 준다
n = int(input())
grid = [
list(map(int, input().split()))
for _ in range(n)
]
2) 주어진 그리드를 3* 3 단위로 탐색하는 함수 생성
3* 3 그리드의 왼쪽 위 셀을 기준으로 탐색
max_gold = 0
for row in range(0,n-2):
for col in range(0,n-2):
num_of_gold = get_num_of_gold(row, col, row + 2, col + 2)
# 최대 금의 개수를 저장합니다.
max_gold = max(max_gold, num_of_gold)
3) 3* 3 그리드 안의 1을 계산하는 메서드 생성
3* 3 그리드의 왼쪽 위 셀을 기준으로 탐색 그런에 이 메서드는 위 단계에서 불리니 위 단계보다 앞에
def get_num(row_s, col_s, row_e, col_e):
return sum([
grid[i][j]
for i in range(row_s, row_e + 1)
for j in range(col_s, col_e + 1)
])
위의 탐색 중 하나의 예만 들어보자면,
4)출력
2)의 max_gold = max(max_gold, num_of_gold)
에서 의미하는 것이 각 그리드의 3) 값들의 최댓값을 의미
그러니 max_gold
를 출력하면 됨
print(max_gold)
구현
# 1)
n = int(input())
grid = [
list(map(int, input().split()))
for _ in range(n)
]
# 3)
def get_num(row_s, col_s, row_e, col_e):
return sum([
grid[i][j]
for i in range(row_s, row_e + 1)
for j in range(col_s, col_e + 1)
])
max_gold = 0
# 2)
for row in range(0,n-2):
for col in range(0,n-2):
num_of_gold = get_num(row, col, row + 2, col + 2)
# 최대 금의 개수를 저장합니다.
max_gold = max(max_gold, num_of_gold)
# 4)
print(max_gold)
결과
쨔쨘