문제
행과 열의 수가 같은 N*N 크기의 배열 arr이 주어진다(단, -100 ≤ arr[i][j] ≤ 100). 이 배열에서 좌우 대각선에 해당하는 값들을 각각 합하고, 그 값들의 차를 구하여 절대값을 출력한다.
Sample Input :
3 # 주어질 배열 크기 설정 # 여기서는 3*3 크기의 배열이 주어진다
11 2 4
4 5 6
10 8 -12 # 주어진 배열
Sample Output :
15
내 코드:
import math
import os
import random
import re
import sys
def diagonalDifference(arr): # 좌우 대각선에 해당하는 값들을 각각 합하고, 그 차의 절대값을 출력한다
sum_1=0 # 대각선 1
sum_2=0 # 대각선 2
for i in range(n):
sum_1 += arr[i][i] # 좌측 대각선(대각선 1)의 값들을 차례로 더해준다
sum_2 += arr[i][(n-1)-i] # 우측 대각선(대각선 2)의 값들을 차례로 더해준다
answer=abs(sum_1-sum_2) # sum_1과 sum_2 차의 절대값을 출력한다
return answer
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
n = int(input().strip())
arr = []
for _ in range(n):
arr.append(list(map(int, input().rstrip().split())))
result = diagonalDifference(arr)
fptr.write(str(result) + '\n')
fptr.close()
Comment: input으로 주어진 2차원 배열의 대각선 index의 규칙을 알아내는 것이 핵심입니다.
왼쪽 상단부터 내려오는 대각선의 경우 index i, j가 같고(각 index는 0부터 시작되며 i는 행 순서를 나타내고, j는 열 순서를 나타냅니다), 우측 상단부터 내려오는 대각선의 경우 열 순서를 나타내는 index j가 (n-1)-i가 됩니다(여기서 n은 input 배열의 행, 열 갯수입니다).
이러한 규칙만 알아낸다면 for문을 활용해 금방 풀 수 있는 문제입니다.
'Algorithm > HackerRank' 카테고리의 다른 글
[HackerRank]Time Conversion(풀이 성공) (0) | 2021.02.09 |
---|---|
[HackerRank]Birthday Cake Candles(풀이 성공) (0) | 2021.02.01 |
[HackerRank]Compare the Triplets(풀이 성공) (0) | 2021.01.16 |
[HackerRank]Plus Minus(풀이 성공) (0) | 2021.01.10 |
[HackerRank]Mini-Max Sum(풀이 성공) (0) | 2021.01.06 |