Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 가장 부유한 고객의 자산 총액 찾는 방법

m × n 크기의 행렬 accounts가 있다고 가정해 보겠습니다. 여기서 accounts[i][j]는 i번째 고객이 j번째 은행에 보유하고 있는 금액을 의미합니다. 우리의 목표는 가장 부유한 고객의 자산 총액을 구하는 것입니다. 여기서 가장 부유한 고객이란 모든 은행에 보유한 자산을 합산했을 때 금액이 가장 큰 고객을 말합니다.

예를 들어 입력이 다음과 같다면:

102015
30520
10512
15123

출력은 55가 됩니다. 두 번째 고객의 자산은 30 + 5 + 20 = 55로 네 명 중 가장 크기 때문입니다.

문제 해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • max_value를 0으로 초기화합니다.

  • ind_value를 0으로 초기화합니다.

  • i를 0부터 accounts의 행 개수 - 1까지 반복합니다.

    • ind_value에 accounts[i] 행의 모든 값의 합을 저장합니다.

    • 만약 ind_value가 max_value보다 크다면, max_value를 ind_value로 갱신합니다.

  • 반복이 끝나면 max_value를 반환합니다. 이 값이 곧 가장 부유한 고객의 자산입니다.

Python 예제 코드

아래 구현 예제를 통해 더 쉽게 이해할 수 있습니다.

def solve(accounts):
    max_value = 0
    ind_value = 0
    for i in range(len(accounts)):
        ind_value = sum(accounts[i])
        if ind_value > max_value:
            max_value = ind_value
    return max_value

accounts = [[10,20,15],
    [30,5,20],
    [10,5,12],
    [15,12,3]]
print(solve(accounts))

입력

[[10,20,15],
[30,5,20],
[10,5,12],
[15,12,3]]

출력

55

복잡도 분석

이 알고리즘의 시간 복잡도는 O(m × n)입니다. 행렬의 모든 원소를 정확히 한 번씩 확인하기 때문입니다. 공간 복잡도는 O(1)로, 추가적인 저장 공간이 거의 필요하지 않습니다.

더 간결한 대안: 한 줄 풀이

Python의 내장 함수를 활용하면 다음과 같이 한 줄로도 해결할 수 있습니다.

def solve(accounts):
    return max(sum(row) for row in accounts)

각 행의 합을 계산한 뒤 max() 함수로 그중 최댓값을 반환하는 방식으로, 앞서 설명한 반복문 로직과 동일한 결과를 훨씬 간결한 코드로 얻을 수 있습니다.