'''
NxN 에 m 만큼의 길이로
'''
drc_plus = [(-1,0),(0,1),(1,0),(0,-1)] # 위~왼위까지
drc_x = [(-1,1),(1,1),(1,-1),(-1,-1)] # 위~왼위까지
# print(drc[0][1])
t = int(input())
for tc in range(1,t+1):
n, m = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(n)]
max_fly = 0
for i in range(n):
for j in range(n):
kill_fly_p = 0 # 파리 초기화
kill_fly_x = 0 # 파리 초기화
# 십자 4방향 탐색
for k in range(4):
# p 방향의 m거리만큼 탐색
for p in range(1,m): # 1 2
ni,nj = i + drc_plus[k][0]*p, j + drc_plus[k][1]*p
if 0<=ni<n and 0<=nj<n: # 벽 체크
kill_fly_p += arr[ni][nj]
for x in range(1,m):
ni,nj = i + drc_x[k][0]*x, j + drc_x[k][1]*x
if 0<=ni<n and 0<=nj<n: # 벽 체크
kill_fly_x += arr[ni][nj]
kill_fly_p += arr[i][j]
kill_fly_x += arr[i][j]
if max_fly < kill_fly_p: # 십자
max_fly = kill_fly_p
# print('p',i,j,max_fly)
if max_fly < kill_fly_x: # x자
max_fly = kill_fly_x
# print('x',i,j,max_fly)
print(f'#{tc} {max_fly}')
개선점
1. 변수 초기화 방식
kill_fly_p = 0 # 파리 초기화
kill_fly_x = 0 # 파리 초기화
'''for 문'''
kill_fly_p += arr[i][j]
kill_fly_x += arr[i][j]
대신에
kill_fly_p = arr[i][j]
kill_fly_x = arr[i][j]
'''for 문'''
으로 초기화를 했으면 코드 연산 횟수를 줄일수 있었을 것 같다
2. 최대 값 구하는 방식
빈 배열을 만들고 append
를 해서 max 메소드
를 사용해서 구했으면 조금 더 빨리 구현할 수 있었을 것 같다.
'알고리즘 문제풀이' 카테고리의 다른 글
Swea D2_파리퇴치 Python (0) | 2024.02.23 |
---|---|
Swea D2_풍선팡 Python (0) | 2024.02.23 |
Swea D2_ 11927. 이진탐색 Python Tree (0) | 2024.02.23 |
Swea D3_1240.단순 2진 암호코드 Python (0) | 2024.02.23 |
Swea D3_11750.이진수1 Python 2진법 (0) | 2024.02.22 |