개발 공부용

1209. [S/W 문제해결 기본] 2일차 - Sum 본문

코딩 테스트

1209. [S/W 문제해결 기본] 2일차 - Sum

솝제로 2025. 11. 21. 11:38
문제
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하여라

 

 

입력
  • 테스트 케이스 10개
  • 첫 줄: 테스트 케이스 번호
  • 두번째 줄부터 ~: 100X100의 2차원 배열 주어짐
1
13 24 13 24 1 7 24 11 22 18 22 16 24 8 15 28 9 24 14 14 28 18 17 9 3 29 22 12 28 2 25 6 11 26 14 19 3 26 13 6 23 3 3 29 13 25 4 27 8 25 28 8 9 17 28 13 24 27 9 25 21 20 6 16 28 5 22 11 9 29 13 26 28 2 11 10 14 14 5 11 26 9 15 3 23 9 8 11 12 6 9 18 6 14 28 21 24 24 20 12
20 28 29 21 27 13 29 16 6 28 5 7 13 20 7 1 11 1 23 12 4 9 27 19 26 2 21 2 1 18 4 20 6 4 18 9 20 3 28 28 1 21 1 2 11 7 20 15 7 29 14 7 15 10 29 24 2 25 29 3 11 9 17 6 2 17 17 11 7 20 26 10 8 1 15 10 2 29 7 9 17 8 25 28 29 12 28 19 3 4 17 17 28 9 2 15 14 6 20 3
13 19 28 23 11 1 19 5 5 28 19 18 16 14 26 20 6 12 20 18 16 22 25 21 25 29 3 ............
........

 

 

출력
#{테스트 케이스 번호} {답}
#1 1712
#2 1743
.......

 

 

풀이
for _ in range(10):
    testNum = input().strip()
    numArr = [list(map(int, input().split())) for _ in range(100)]
     
    #1) 행의 합
    maximum = 0
    for arr in numArr:
        maximum = max(maximum, sum(arr))
 
    #2) 열의 합
    numArrRe = [[numArr[j][i] for j in range(100)] for i in range(100)]
    for arrRe in numArrRe:
        maximum = max(maximum, sum(arrRe))
 
    #3) 대각선의 합
    crossR = [numArr[l][l] for l in range(100)] #4)
    maximum = max(maximum, sum(crossR))
    crossL = [numArr[100-1-k][k] for k in range(100)] #5)
    maximum = max(maximum, sum(crossL))
     
    print(f"#{testNum} {maximum}")

 

행의 합, 열의 합, 대각선의 합을 각각 구하고 그 중 최댓값을 찾는다.

 

1) 행의 합의 경우, 입력받은 그대로 한 행씩 합을 구해서 최댓값을 찾는다.

2) 열의 합의 경우, 입력받은 2차원 배열의 행과 열을 반전시킨 배열을 만들어준 이후, 한 행씩 합을 구해서 최댓값을 찾는다.

 

3) 대각선의 합의 경우, 오른쪽 아래를 향하는 대각선과 왼쪽 아래를 향하는 대각선을 각각 계산한다.

4) 오른쪽 아래를 향하는 대각선에 속하는 요소들로 배열을 만들어준 이후, 합을 구한다.

5) 왼쪽 아래를 향하는 대각선에 속하는 요소들로 배열을 만들어준 이후, 합을 구한다.