개발 공부~

[SWEA D3] 1209. [S/W 문제해결 기본] 2일차 - Sum (파이썬) 본문

코딩테스트/SWEA

[SWEA D3] 1209. [S/W 문제해결 기본] 2일차 - Sum (파이썬)

머밍 2024. 7. 4. 18:17

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&passFilterYn=Y&contestProbId=AV13_BWKACUCFAYh&categoryId=AV13_BWKACUCFAYh&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=P&pageSize=10&pageIndex=2

문제

다음 100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하여라.

  • 제약 사항배열의 크기는 100X100으로 동일하다.동일한 최댓값이 있을 경우, 하나의 값만 출력한다.
  • 각 행의 합은 integer 범위를 넘어가지 않는다.
  • 총 10개의 테스트 케이스가 주어진다.

입력

각 테스트 케이스의 첫 줄에는 테스트 케이스 번호가 주어지고 그 다음 줄부터는 2차원 배열의 각 행 값이 주어진다.

 

출력

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.

ex

다음과 같은 5X5 배열에서 최댓값은 29이다.

Solution

가로, 세로의 합은 두개의 리스트를 만들어 저장한 후 max()로 값을 찾았다.
가로 세로가 같은 숫자인 대각선은 구현이 쉬웠지만 다른 대각선은 어떻게 할지가 고민이었다.
그냥 구현하는 것보다 대칭을 이용해 보고 싶어 크기의 절반만큼 반복하여 구현해보았다.
다음엔 리스트에 넣지 않고 그때마다 최댓값을 비교하여 구현해야겠다.

for test_case in range(1, 11):
    n =int(input())
    arr = [list(map(int,input().split())) for _ in range(100)]
    
    #가로
    row = [sum(r) for r in arr]
    max_r = max(row)
    
    #세로
    col = [0]* 10
	
    for i in range(100):
        s= 0
        for j in range(100):
            s += arr[j][i]
        col.append(s)
    max_c = max(col)
    
    #대각선
    k=[]
    o =0 
    for i in range(100):
        o += arr[i][i]
    k.append(o)

    s,e, l = 99,0,0
    for i in range(50):
        l +=arr[s][e] + arr[e][s]
        s -=1
        e +=1
    k.append(l)
    max_k =max(k)

    print(f'#{n} {max(max_r,max_c,max_k)}')