m × n 크기의 행렬 accounts가 있다고 가정해 보겠습니다. 여기서 accounts[i][j]는 i번째 고객이 j번째 은행에 보유하고 있는 금액을 의미합니다. 우리의 목표는 가장 부유한 고객의 자산 총액을 구하는 것입니다. 여기서 가장 부유한 고객이란 모든 은행에 보유한 자산을 합산했을 때 금액이 가장 큰 고객을 말합니다.
예를 들어 입력이 다음과 같다면:
| 10 | 20 | 15 |
| 30 | 5 | 20 |
| 10 | 5 | 12 |
| 15 | 12 | 3 |
출력은 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() 함수로 그중 최댓값을 반환하는 방식으로, 앞서 설명한 반복문 로직과 동일한 결과를 훨씬 간결한 코드로 얻을 수 있습니다.