N x N 크기의 정사각형이 있다. 각각의 대각선 상의 원소들의 값을 더한 값의 차이를 구하라
입력 형식
표준입력으로 정사각형의 크기 N을 입력받는다.
1에서 입력한 N 만큼 row를 입력한다.
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() {
reader := bufio.NewReader(os.Stdin)
line, _, _ := reader.ReadLine()
n, _ := strconv.Atoi(string(line))
sum := 0
for i := 0; i < n; i++ {
line, _, _ = reader.ReadLine()
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
}
func diagonalDifference(reader *bufio.Reader, n int) int {
if n == 0 {
return 0
}
line, _, _ := reader.ReadLine()
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() {
reader := bufio.NewReader(os.Stdin)
line, _, _ := reader.ReadLine()
n, _ := strconv.Atoi(string(line))
fmt.Println(abs(diagonalDifference(reader, n)))
}
Contents
Diagonal Difference
문제
입력 형식
출력
입력 예
출력 예
풀이
Recent Posts
Archive Posts
Tags