원문
We define a magic square to be an n x n matrix of distinct positive integers from 1 to n^2 where the sum of any row, column, or diagonal of length is always equal to the same number: the magic constant.
You will be given a 3 x 3 matrix s of integers in the inclusive range [1,9].
We can convert any digit a to any other digit b in the range [1,9] at cost of [a-b].
Given s, convert it into a magic square at minimal cost. Print this cost on a new line.
Note: The resulting magic square must contain distinct integers in the inclusive range [1,9].
For example, we start with the following matrix s:
5 3 4
1 5 8
6 4 2
We can convert it to the following magic square:
8 3 4
1 5 9
6 7 2
This took three replacements at a cost of [5-8]+[8-9]+[4-7] = 7.
Function Description
Complete the formingMagicSquare function in the editor below. It should return an integer that represents the minimal total cost of converting the input square to a magic square.
formingMagicSquare has the following parameter(s):
s : a 3 x 3 array of integers
번역
마방진은 n x n 행렬에서 각각의 위치의 양수가 1에서 n^2 사이이고, 모든 행과 열, 대각선의 합이 항상 동일한 값을 가진다. 이 동일한 값을 마법상수라 한다.
1부터 9 사이에 정수값을 범위로 하는 3x3 행렬 s가 주어진다.
우리는 어떤 숫자 a를 1부터 9사이의 다른 값 b로 |a-b|((절대값) 만큼의 비용을 사용하여 변환할 수 있다.
주어진 s를 통해 최소의 비용으로 마방진을 완성하라. 비용을 새 라인에 출력하라.
Note: 결과는 1부터 9 사이의 정수를 반드시 포함하고 있는 마방진이어야 한다.
예를들어, 아래 행렬 s가 주어진다
5 3 4
1 5 8
6 4 2
우리는 아래 마방진으로 변환할 수 있다.
8 3 4
1 5 9
6 7 2
이렇게 변환하는데 드는 비용은 [5-8]+[8-9]+[4-7] = 7 이다.
(3 + 1 + 3)
함수 설명
아래 편집기에서 formingMagicSquare 함수를 완성하라.
행렬을 마방진으로 변환하기 위한 최소 비용의 합계를 리턴해야한다.
formingMagicSquare는 다음의 파라미터를 가진다.
S : 3x3 정수배열
문제 해결 방법
어차피 마방진은 3x3이고 경우의 수가 8개밖에 안되므로 미리 만들어놓은 마방진과 비교해서
값을 구하는게 간단하고 빠르다.
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
// Complete the formingMagicSquare function below.
function formingMagicSquare(s) {
var arr = []
arr.push([[8,3,4],[1,5,9],[6,7,2]]);
arr.push([[4,3,8],[9,5,1],[2,7,6]]);
arr.push([[6,1,8],[7,5,3],[2,9,4]]);
arr.push([[2,9,4],[7,5,3],[6,1,8]]);
arr.push([[2,7,6],[9,5,1],[4,3,8]]);
arr.push([[6,7,2],[1,5,9],[8,3,4]]);
arr.push([[4,9,2],[3,5,7],[8,1,6]]);
arr.push([[8,1,6],[3,5,7],[4,9,2]]);
var min = Number.MAX_VALUE;
for(var i=0;i<8;i++){
var minCost = 0;
for(var j=0;j<3;j++){
for(var k=0;k<3;k++){
minCost +=Math.abs(arr[i][j][k]-s[j][k]);
}
}
if(min>minCost)
min=minCost;
}
return min;
}
|
cs |
'알고리즘' 카테고리의 다른 글
Array Manipulation Javascript로 풀기 + 해설 (0) | 2020.07.17 |
---|---|
Minimum Swaps 2 자바스크립트로 풀기 (0) | 2020.07.13 |
New Year Chaos Javascript로 풀기 (0) | 2020.07.09 |
Extra Long Factorials javascript 번역 및 풀이 (0) | 2019.11.04 |
Climbing the Leaderboard javascript 번역 및 풀이 (0) | 2019.10.14 |