본문 바로가기
알고리즘?/기본3 탐색&시뮬레이션(string, 1차원 2차원 리스트 탐색)

6. 격자판 최대합

by 몰라닉네임 2023. 5. 10.

문제설명

 

n에 따라 받아야하는 입력의 크기가 달라지는데 이를 어떻게 받아야할지 모르겠다. 

(n을 읽고 2차원 리스트를 만들어야하는 거잖아)

 

2차원 리스트화

a=[list(map(int, input().split())) for _ in range(n) ] 한줄 mapping으로 읽어서 리스트화를 n번한다.

 

import sys
sys.stdin=open("input.txt", "r")

n=int(input())

a=[list(map(int, input().split())) for _ in range(n)] # 한줄 읽어서 리스트화를 n번

for x in a:
    print(x)


 

[문제 수들의 합]

5*5 격자판에 아래와 같이 숫자가 적혀있습니다.

 

N*N 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합중 가장 큰 행을 출력합니다.

 

-입력설명

첫 줄에 자연수 N이 주어진다.(1<=N<=50)

두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.

 

-출력설명 

최대합을 출력합니다.

 

-입력예제1

5

10 13 10 12 15

12 39 30 23 11

11 25 50 53 15

19 27 29 37 27

19 13 30 13 19

 

-출력예제1

155

 

[풀이]

 

1. 행, 열의 합 이중 for문

2. 대각선의 합, 역 대각선의 합도! a[n-i-1]

import sys
#sys.stdin=open("input.txt", "r")

n=int(input())

a=[list(map(int, input().split())) for _ in range(n)] # 한줄 읽어서 리스트화를 n번

largest=-2147000000

for i in range(n):
    sum1=sum2=0
    for j in range(n):
        sum1+=a[i][j]
        sum2+=a[j][i]
    if sum1>largest:
        largest=sum1
    if sum2>largest:
        largest=sum2

sum1=sum2=0

for i in range(n):
    sum1+=a[i][i]
    sum2+=a[i][n-i-1]
    if sum1>largest:
        largest=sum1
    if sum2>largest:
        largest=sum2

print(largest)

 

*본 문제는 인프런 김태원 강사님의 파이썬 알고리즘 문제풀이에 기반합니다.