CLOSE

Recommanded Free YOUTUBE Lecture: <% selectedImage %>

## Contents

### Diagonal Difference

#### 문제

N x N 크기의 정사각형이 있다. 각각의 대각선 상의 원소들의 값을 더한 값의 차이를 구하라

#### 입력 형식

1. 표준입력으로 정사각형의 크기 N을 입력받는다.
2. 1에서 입력한 N 만큼 row를 입력한다.
3. N x N 행렬이 만들어진다.

#### 출력

대각선의 원소들의 값을 더한 값의 차이를 출력한다.

```3
11 2 4
4 5 6
10 8 -12```

`15`

#### 풀이 (1 + 6 + 4) - (3 + 6 + 21) 연산에 대한 절대 값을 취하는 방법이 있다. 하지만 이 방법은 각 대각선 연산결과를 따로 유지해야 하므로 두 개의 배열이 필요하다.

그냥 각 배열을 순환 할 적에, 차이를 구한 다음에 더하기 연산을 하면, 메모리를 절약 할 수 있을 것이다.
```package main

import (
"fmt"
)

func abs(a int) int {
if a < 0 {
a = a * -1
}
return a
}

func main() {
a := [][]int{[]int{1, 2, 3}, []int{5, 6, 10}, []int{21, 3, 4}}
sum := 0
for k, v := range a {
sum += v[k] - v[len(a)-(k+1)]
}
fmt.Println(abs(sum))
}```

표준입력으로 값을 읽도록 수정하면 완성이다.
```package main

import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)

func abs(a int) int {
if a < 0 {
a = a * -1
}
return a
}

func main() {
n, _ := strconv.Atoi(string(line))

sum := 0
for i := 0; i < n; i++ {
sr := strings.Split(string(line), " ")

item1, _ := strconv.Atoi(sr[i])
item2, _ := strconv.Atoi(sr[n-(i+1)])
sum += (item1 - item2)
}

fmt.Println(abs(sum))
}```

재귀로 풀어보자.
```package main

import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)

func abs(a int) int {
if a < 0 {
a = a * -1
}
return a
}

if n == 0 {
return 0
}
sr := strings.Split(string(line), " ")
itemn := len(sr)

item1, _ := strconv.Atoi(sr[itemn-n])
item2, _ := strconv.Atoi(sr[n-1])
return (item1 - item2) + diagonalDifference(reader, n-1)
}

func main() {