https://www.codetree.ai/missions/2/problems/best-place-of-33?&utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
최고의 33위치
N * N 크기의 격자 정보가 주어집니다. 이때 해당 위치에 동전이 있다면 1, 없다면 0이 주어집니다. N * N 격자를 벗어나지 않도록 3 * 3 크기의 격자를 적절하게 잘 잡아서 해당 범위 안에 들어있는 동전의 개수를 최대로 하는 프로그램을 작성해보세요
입력 형식
첫 번째 줄에는 격자의 크기를 나타내는 N이 주어집니다.
두 번째 줄부터는 N개의 줄에 걸쳐 격자에 대한 정보가 주어집니다. 각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 0또는 1로 이루어진 N개의 숫자로 나타내어지며 공백을 사이에 두고 주어집니다.
- 3 ≤ N ≤ 20
출력 형식
N * N 격자를 벗어나지 않으면서, 3 * 3 크기 격자 내에 들어올 수 있는 최대 동전의 수를 출력해주세요.
입출력 예제
예제1
입력:
3
1 0 1
0 1 0
0 1 0
출력:
4
내가 짠 코드
import sys
n = int(input())
arr = [
list(map(int, input().split()))
for _ in range(n)
]
ans = -sys.maxsize
sum = 0
#시작점구하기
for i in range(n-2):
for j in range(n-2):
sum = 0
#3*3 의 1의 개수 구하기
for k in range(i, i+3):
for m in range(j,j+3):
sum += arr[k][m]
ans = max(sum,ans)
print(ans)
배열을 순회하는 완전 탐색문제이다. 3x3 행렬에 가장 많이 1이 들어갈 때 그 갯수를 구해야한다.
완전 탐색 시에는 기준을 정하는 것이 중요하다.
이 문제에서는 3x3 행렬로 nxn 행렬을 순회하기 위해 3x3 행렬의 시작점을 돌아가면서 고정 시켜두고, 합을 구하였다.
이때, 범위 설정이 중요한데 시작점은 (0,0) 에서 시작하고, 마지막 점은 n-3, n-3 번째 여야 인덱스에 넘어가지 않을 것이다.
(시작점이 (n-3, n-3) 일때 시작점으로 부터 n-3, n-2, n-1 행까지와 n-3, n-2, n-1 열까지의 3x3 행렬을 탐색하므로)
이때 range() 함수에서 끝점은 미포함이므로 n-2 로 설정해야한다.
'코드트리 챌린지' 카테고리의 다른 글
[코드트리] 오랜만에 코딩테스트 실력진단 (1) | 2024.03.20 |
---|---|
[코드트리] 100으로 나눈 나머지의 수열 / 재귀함수 (0) | 2023.10.26 |
[코드트리] 재귀함수를 이용한 3n + 1 수열 / 재귀함수 (0) | 2023.10.26 |
[코드트리] 큰 숫자 자리수의 합 / 재귀함수 (1) | 2023.10.26 |
[코드트리 챌린지] 코드트리 챌린지 8주간의 실력 진단 결과 비교 + 8주차 실력진단 + 푼 문제들 정리 (0) | 2023.10.26 |