아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

매직스퀘어

시간 제한1초메모리 제한512 MB

요약
N x N 행렬이 주어질 때 모든 행, 열, 두 대각선의 합이 같고 1부터 N^2까지의 수가 한 번씩 쓰였는지 판정한다.
난이도

쉬움10점 중 2점

유형
구현, 행렬, 배열
정답자
아직 제출이 없습니다

문제

수학에서 행렬은 수나 기호, 수식을 네모꼴로 배열한 것이다. 가로줄을 행, 세로줄을 열이라고 한다. 행의 개수와 열의 개수가 같은 행렬을 정방행렬이라고 한다.

매직스퀘어는 다음 두 성질을 만족하는 n×nn \times n 정방행렬이다.

  1. 원소는 11부터 n2n^2까지의 정수이고, 중복되는 수가 없이 모두 달라야 한다.
  2. 각 행의 합, 각 열의 합, 두 대각선(왼쪽 위에서 오른쪽 아래, 오른쪽 위에서 왼쪽 아래)의 합이 모두 같다. 이 합은 n×(n2+1)2\dfrac{n \times (n^2 + 1)}{2}이다.

즉 n=2n = 2이면 합은 55, n=3n = 3이면 합은 1515, n=4n = 4이면 합은 3434이다. n=2n = 2인 매직스퀘어는 존재하지 않는다.

정방행렬을 입력받아 그 행렬이 매직스퀘어인지 판정하는 프로그램을 작성하시오.

입력

첫째 줄에 정방행렬의 크기 NN이 주어진다. (3≤N≤1003 \le N \le 100)

둘째 줄부터 NN개의 줄에 각 줄마다 NN개의 정수가 공백으로 구분되어 주어진다. 각 정수는 11 이상 N2N^2 이하이다.

출력

주어진 정방행렬이 매직스퀘어이면 TRUE를, 아니면 FALSE를 출력한다.

예제3

  1. 예제 1

    입력
    3
    2 7 6
    9 5 1
    4 3 8
    
    예상 출력
    TRUE
    
  2. 예제 2

    입력
    4
    4 14 15 1
    9 7 6 12
    5 11 10 8
    16 2 3 13
    
    예상 출력
    TRUE
    
  3. 예제 3

    입력
    5
    11 24 7 20 3
    4 12 25 8 16
    17 5 13 21 9
    10 18 1 14 22
    23 6 19 2 15
    
    예상 출력
    TRUE