T = int(input())
for tc in range(1,T+1):
N, M = list(map(int,input().split()))
arr = [list(map(int,input().split())) for _ in range(N)]
# print(arr)
max_list = []
for i in range(N-M+1):
for j in range(N-M+1):
max_v = 0
for m in range(M):
for n in range(M):
max_v += arr[i+m][j+n]
max_list.append(max_v)
# print(max_v)
for k in max_list:
if max_v < k:
max_v = k
print(f'#{tc} {max_v}')
더 짧게 만든 코드
T = int(input())
for tc in range(1,T+1):
N,M = map(int,input().split()) # 5 2
arr = [list(map(int,input().split())) for _ in range(N)]
# print(arr)
dij = [[0,1],[1,0],[0,0],[1,1]]
max_v = 0
for i in range(N-M+1):
for j in range(N-M+1):
sum_v = 0 # 한 좌표마다 초기화
for x in range(M): # 0 1
for y in range(M): # 0 1
sum_v += arr[i+x][j+y]
if max_v < sum_v: # 최대 값 비교
max_v = sum_v
print(f'#{tc} {max_v}')
실수 한 점
max_list
의 위치를 잘 조정해야 했다.max_list
에 들어갈 누적된max_v
들은 한 테스트가 전부 다 돌아가고 나서 호출해야지, 모든 결과값이 들어가 있다. -> 한 테스트가 시작 되는 지점에서 초기화해줌, -> append는 한 지점(i,j)에서 범위만큼 파리를 잡고 난 후 다음 지점(i+1,k)로 이동하기 전max_list
에 추가- 4방향 탐색이 가능하지 않을까 하면서 풀어봄
결론 : 더욱 복잡해서 해당 알고리즘은 유망하지 않다.
만약 M =3 이라서 3x3 의 공간을 파리퇴치할 때
(3,2) 와 (2,3)을 접근할 방법에 어려움을 느꼈음
T = int(input())
for tc in range(1,T+1):
N,M = map(int,input().split()) # 5 2
arr = [list(map(int,input().split())) for _ in range(N)]
# print(arr)
dij = [[0,1],[1,0],[0,0],[1,1]]
max_v = 0
for i in range(N-M+1):
for j in range(N-M+1):
sum_v = 0 # 한 좌표마다 초기화
for p in range(1,M): # 0
for k in range(4):
ni = i + dij[k][0]
nj = j + dij[k][1]
sum_v += arr[ni+p][nj+p]
if max_v < sum_v: # 최대 값 비교
max_v = sum_v
print(max_v)
'알고리즘 문제풀이' 카테고리의 다른 글
Swea D2_1979.어디에 단어가 있을까? Python (0) | 2024.02.18 |
---|---|
백준 2669.직사각형 네개의 합집합의 면적 구하기 실버5 (0) | 2024.02.18 |
백준 1284.집주소 Python 브론즈3 (0) | 2024.02.17 |
백준 1267 핸드폰 요금 Python 브론즈 3 (0) | 2024.02.17 |
Swea D3_5789.현주의 상자 바꾸기 Python (1) | 2024.02.17 |