꾸준히 합시다

백준 파이썬 10177번: Magic Squares 본문

코딩 테스트 문제 풀이

백준 파이썬 10177번: Magic Squares

tturbo0824 2021. 8. 9. 09:32

https://www.acmicpc.net/problem/10177

 

10177번: Magic Squares

A magic square is an arrangement of integers in a square grid, where the numbers in each row, and in each column, and the numbers on each main diagonal, all add up to the same value. A magic square has the same number of rows and columns and we will let m

www.acmicpc.net

문제 유형: 구현

 

 

# Solution 1

import sys

input = sys.stdin.readline

for _ in range(int(input())):
    n = int(input())
    arr = [list(map(int, input().split())) for _ in range(n)] 
    target = sum(arr[0]) # 타겟 설정
    col = 0 # 세로 비교 변수
    leftDiagonal = 0 # 좌측 대각선 비교 변수
    rightDiagonal = 0 # 우측 대각선 비교 변수
    isMagic = True # Magic square 여부 판단

    for i in range(n):
        # 가로줄 검사
        if target != sum(arr[i]):
            isMagic = False
            break   
        leftDiagonal += arr[i][i]
        rightDiagonal += arr[i][-(i+1)]
        
        if i == n - 1:
            # 좌측 대각선 검사
            if leftDiagonal != target:
                isMagic = False
                break
            # 우측 대각선 검사
            elif rightDiagonal != target:
                isMagic = False
                break
        # 세로줄 검사
        for j in range(n):
            col += arr[j][i]
            if j == n - 1:
                if col != target:
                    isMagic = False
                    break
                col = 0
    
    print("Magic square of size %d"%n if isMagic == True else "Not a magic square")

Magic square는 사각 그리드 안에 정수를 배열한 것으로 아래 예시처럼 각 행, 각 열, 각 대각선의 숫자의 합이 모두 동일해야 한다.

위 소스 코드는 주어진 사각 그리드가 Magic square인지 여부를 판단하고, Magic square가 맞다면 그 사이즈를 출력하는 프로그램.

Comments