본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 1209. Sum - Python

by chaemj97 2022. 2. 19.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh 

 

SW Expert Academy

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

swexpertacademy.com

 

< 📝 문제 >

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

 

하여라.

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


< ❓ 생각 >

반복문을 통해 행 합, 열 합, 대각선 합을 구한 후 가장 큰 값을 찾기

4개의 값 중 가장 큰 값을 출력


< 💻 코드 >

1.

for tc in range(1,11):
    # 테스트 케이스 번호
    N = int(input())
    # 2차원 배열
    arr = [list(map(int, input().split())) for _ in range(100)]
    result = 0

    # 행 합, 열 합 중 가장 큰 값 찾기
    for i in range(100):
        # 가로 합
        sum_row = 0
        # 세로 합
        sum_column = 0
        for j in range(100):
            sum_row += arr[i][j]
            sum_column += arr[j][i]

        if result < sum_row:
            result = sum_row
        if result < sum_column:
            result = sum_column

    # 대각선 합 구하기
    # 오른쪽 아래로 가는 대각선 합
    a = 0
    # 오른쪽 위로 가는 대각선 합
    b = 0
    for k in range(100):
        a += arr[k][k]
        b += arr[k][100 - 1 - k]

    # 행 합, 열 합, 대각선 합 중 큰 값 찾기
    if result < a:
        result = a
    if result < b:
        result = b

    print(f'#{tc} {result}')

2.

for _ in range(10):
    tc = int(input())
    arr = [list(map(int, input().split())) for _ in range(100)]
    max_sum = -2100000000
    
    # 1. 행 우선순회 하면서 각 행의 합 구하기
    for i in range(100):
        # 행 순회 시작점에서 합을 구하기 위한 변수 초기화
        row_sum = 0
        for j in range(100):
            row_sum += arr[i][j]
        # 반복문이 끝난시점 : row_sum -> 한 행의 합이 저장되어 있음
        # 최대 합만 저장
        max_sum = row_sum if row_sum > max_sum else max_sum
        
    # 2. 열 우선순회 합구하기
    for i in range(100):
        # 열 순회 시작점에서 합을 구하기 위한 변수 초기화
        col_sum = 0
        for j in range(100):
            col_sum += arr[j][i]
        # 반복문이 끝난시점 : row_sum -> 열 행의 합이 저장되어 있음
        # 최대 합만 저장
        max_sum = col_sum if col_sum > max_sum else max_sum

    # 3.대각선 순회
    # r == c , 대각선 1
    # r + c == 99 대각선 2
    dia1_sum = 0
    dia2_sum = 0
    for i in range(100):
        for j in range(100):
            if i == j:
                dia1_sum += arr[i][j]
            if i + j == 99:
                dia2_sum += arr[i][j]
    max_sum = dia1_sum if dia1_sum > max_sum else max_sum
    max_sum = dia2_sum if dia2_sum > max_sum else max_sum
    
    print(f'#{tc} {max_sum}')


< ❗ >

1. 2차원 배열 입력하는 법

arr = [list(map(int, input().split())) for _ in range(100)]

 

2. 조건부 표현식 - if문을 한줄로

if dia2_sum > max_sum:
    max_sum = dia2_sum

[결과 = A if 조건 else B]

max_sum = dia2_sum if dia2_sum > max_sum else max_sum
728x90
반응형

댓글