2가지 방법 다 알고 있어야 함
이웃한 요소가 없으면?
주의!!
아래 코드를 보면 예외 처리를 일일이 했음
잘못된 예외 처리 (인덱스 고정)
현재 코드는 인덱스가 범위를 벗어나면 0이나 n-1로 강제 고정→ 이 경우, 격자 끝에 있는 칸들은 존재하지 않는 이웃 대신 자기 자신 혹은 엉뚱한 벽 끝값과 불필요하게 계산을 계속 수행하게 된다.
무엇보다 조건 4개 다 쓰는 거는 하나 실수로 틀리면 디버깅 어려움!!
T = int(input())
# 델타 탐색
for test_case in range(1, T + 1):
# ///////////////////////////////////////////////////////////////////////////////////
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1] # 상 하 좌 우
ans = 0
for i in range(n):
for j in range(n): # 전체 arr 탐색
for k in range(4): # delta 탐색
nxt_i = i + dx[k]
nxt_j = j + dy[k]
# 범위 체크!!!
# 또 다른 방법
# for di, dj in ((-1, 0), (1,0), (0,-1), (0,1)):
# ni = i + dx # nj = j + dy #if 0<=nxt_i<n and 0<=nxt_j<n:
if nxt_i<0:
nxt_i = 0
elif nxt_i>=n:
nxt_i = n-1
elif nxt_j<0:
nxt_j = 0
elif nxt_j>=n:
nxt_j = n-1
ans += abs(arr[i][j] - arr[nxt_i][nxt_j])
print(f'#{test_case} {ans}')T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
# 델타 탐색
for test_case in range(1, T + 1):
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1] # 상 하 좌 우
ans = 0
for i in range(n):
for j in range(n): # 전체 arr 탐색
for k in range(4): # delta 탐색
nxt_i = i + dx[k]
nxt_j = j + dy[k]
# 범위 체크!!!
# 또 다른 방법
# for di, dj in ((-1, 0), (1,0), (0,-1), (0,1)):
# ni = i + dx
# nj = j + dy
if 0 <= nxt_i < n and 0 <= nxt_j <n:
ans += abs(arr[i][j] - arr[nxt_i][nxt_j])
print(f'#{test_case} {ans}')정답 코드: if 0 <= nxt_i < n and 0 <= nxt_j <n: 조건 처리 한 방에 함, 그냥 범위에 포함되는 것만 계산. 단, 위에 탐색 전체 범위는 range(n)으로 해야 끝의 원소까지 계산 됨.