[PYTHON] 행렬의 합과 최대값구하기

+) 코드에 문제가 있어 수정완료함

  • 문제

n*n행렬의 각 행의합,각 열의합,대각선의 합을 구한 후, 최댓값을 출력하시오

  • 알고리즘 표현

1. n*n을 넣은 후, 각 행을 나타내는 list를 n번만큼 반복하여 n*n행렬을 만든다.

>> [[21, 15, 14, 16, 5], [11, 25, 31, 10, 18], [6, 9, 22, 17, 35], [12, 7, 29, 33, 10], [18, 24, 9, 30, 11]]

 

2.각 행의 합(rowsum), 각 열의 합(columnsum), 각 대각선의 합(first_daegaksun_sum, second_daegaksun_sum)을 만들어 dictionary형식으로 표현한다. { 행 or 열 or 대각선 : 합..}

>> {'1행의 합': 71, '1열의 합': 71, '2행의 합': 95, '2열의 합': 95, '3행의 합': 89, '3열의 합': 89, '4행의 합': 91, '4열의 합': 91, '5행의 합': 92, '5열의 합': 92, '첫번째 대각선의 합': 112, '두번째 대각선의 합': 62}

 

3. 그 dictionary의 value중 최댓값을 찾아 출력한다.

>> 모든 합들중 최대값은 112 이다

  • input

n * n 행렬 : 원하는 n의 값은? 5
1번째 row를 한칸씩 띠어서 쓰세요 : 21 15 14 16 5
2번째 row를 한칸씩 띠어서 쓰세요 : 11 25 31 10 18
3번째 row를 한칸씩 띠어서 쓰세요 : 6 9 22 17 35
4번째 row를 한칸씩 띠어서 쓰세요 : 12 7 29 33 10
5번째 row를 한칸씩 띠어서 쓰세요 : 18 24 9 30 11

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
matrix = [[211514165], [1125311018], [69221735], [127293310], [182493011]]
sum_list = {} #합들을 담을 dictionary
first_daegaksun_sum = 0  # 첫 대각선 \ 합
second_daegaksun_sum = 0 # 두번째 대각선 / 합
n=5 #5*5행렬이다.
for i in range(n):
    rowsum = 0 #행의 합
    columnsum = 0 #열의 합
    for j in range(n):
        rowsum += matrix[i][j]
        columnsum += matrix[j][i] #i와 j만 바꿔주면됨.
    sum_list[str(i+1)+'행의 합']=rowsum
    sum_list[str(i+1)+'열의 합']=columnsum #dic로 이쁘게 만들기
    first_daegaksun_sum += matrix[i][i]
    second_daegaksun_sum += matrix[i][n-i-1]
sum_list['첫번째 대각선의 합']=first_daegaksun_sum
sum_list['두번째 대각선의 합']=second_daegaksun_sum
 
 
#모든 것들의 합출력 dictionary
print(sum_list)
#{'1행의 합': 71, '1열의 합': 68, '2행의 합': 95, '2열의 합': 80, '3행의 합': 89, '3열의 합': 105, '4행의 합': 91, '4열의 합': 106, '5행의 합': 92, '5열의 합': 79, '첫번째 대각선의 합': 112, '두번째 대각선의 합': 62}
 
#이 value중 최대값 출력
print('모든 합들중 최대값은 {} 이다'.format(max(list(sum_list.values()))))
#모든 합들중 최대값은 112 이다
cs

 

  • 결과값

[[21, 15, 14, 16, 5], [11, 25, 31, 10, 18], [6, 9, 22, 17, 35], [12, 7, 29, 33, 10], [18, 24, 9, 30, 11]] 
{'1행의 합': 71, '1열의 합': 68, '2행의 합': 95, '2열의 합': 80, '3행의 합': 89, '3열의 합': 105, '4행의 합': 91, '4열의 합': 106, '5행의 합': 92, '5열의 합': 79, '첫번째 대각선의 합': 112, '두번째 대각선의 합': 62}
모든 합들중 최대값은 112 이다

 

  • 배울코드

1. row2 : matrix을 만들때, for문을 통한 input으로 넣어보는 것

2. 위 코드의 for문을 완벽하게 이해해보기

3. 열의합은 row와 똑같이 하고 i와 j만 바꾸면된다.

 

*)

어떤 피드백이든 댓글부탁드립니다.

더 좋은 방법이 있다면 알려주세요.

도움이 되셨다면, 하트버튼 또는 댓글부탁드려요~

요청할 문제가 있다면 댓글 부탁드려요!!!

*(

+ Recent posts