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

파이썬 map() 함수로 1이 가장 많은 행 찾기

0과 1로만 구성된 2차원 배열(행렬)이 주어졌다고 가정해 봅시다. 모든 행은 정렬되어 있으며, 우리의 목표는 1이 가장 많이 포함된 행을 찾아 그 인덱스를 출력하는 것입니다. 이 문제는 파이썬의 내장 함수인 map()을 활용하면 매우 간결하게 해결할 수 있습니다.

map() 함수는 파이썬 내장 함수 중 함수형 프로그래밍에 활용되는 가장 단순한 도구입니다. 리스트와 같은 시퀀스나 반복 가능한(iterable) 객체에 지정한 함수를 일괄적으로 적용해 줍니다.

예제 입력

입력 배열:
[[0, 1, 1, 1, 1],
[0, 0, 1, 1, 1],
[1, 1, 1, 1, 1],
[0, 0, 0, 0, 1]]

1이 가장 많은 행의 인덱스 = 2

알고리즘

Step 1: map() 함수를 사용해 행렬의 각 행에 대해 sum()을 적용합니다.
Step 2: 각 행에 포함된 1의 개수(합계)를 담은 리스트가 반환됩니다.
Step 3: 리스트에서 최댓값의 인덱스를 구해 출력합니다.

예제 코드

# 1이 가장 많은 행을 찾는 파이썬 프로그램
def maximumofones(n):
    max1 = list(map(sum, n))
    print("MAXIMUM NUMBER OF 1's ::>", max1.index(max(max1)))

# 드라이버 코드
if __name__ == "__main__":
    n = [[0, 1, 1, 1, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 1]]
    maximumofones(n)

실행 결과

MAXIMUM NUMBER OF 1's ::> 2

코드 동작 원리

map(sum, n)은 행렬 n의 각 행을 sum() 함수에 전달합니다. 행의 모든 요소가 0 또는 1이므로, 각 행의 합계는 곧 해당 행에 포함된 1의 개수와 같습니다. 그 결과 생성된 리스트에 max()로 최댓값을 구하고, index()로 그 위치를 찾으면 1이 가장 많은 행의 인덱스를 얻을 수 있습니다.

위 예제에서 세 번째 행(인덱스 2)은 1이 다섯 개로 가장 많으므로 결과값으로 2가 출력됩니다. 이 방법은 별도의 반복문 없이 한 줄의 로직으로 해결할 수 있어 코드가 간결하고 가독성이 뛰어납니다.