본문 바로가기
Algorithm/HackerRank

[HackerRank]Diagonal Difference(풀이 성공)

by 전봇대파괴자 2021. 1. 28.

문제

 

행과 열의 수가 같은 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문을 활용해 금방 풀 수 있는 문제입니다.