컴퓨터 공부/🐍 Python

2차원 배열에서 최댓값 찾기

letzgorats 2021. 9. 7. 19:25

우리는 코딩을 하면서 또 알고리즘 문제를 풀면서, 2차원 배열을 정말 많이 쓴다.

2차원 배열을 한줄로 빠르게 생성하는 List Comprehension을 종종 사용하곤 하는데, 그러면 2차원 배열에서 어떤 원소값이 가장 큰 값인지 한번에 찾는 방법은 없을까? 물론, for문으로 배열을 돌면서 입력값 하나하나를 비교해가면서 찾을 수야 있겠지만, 빠르게 찾는 방법이 있으니까 한번 배워보자.

 

◆ max 값을 사용하면 되는 것 아닐까?

vertices = [[1, 7, 12], [4, 7, 13], [1, 5, 17], [3, 5, 20], [2, 4, 24], [
    1, 4, 28], [3, 6, 37], [5, 6, 45], [2, 5, 62], [1, 2, 67], [5, 7, 73]]

numvert = max(vertices)

print(numvert)  # 출력값 : [5, 7, 73]

그래서, max(배열이름)으로만 값을 출력해봤다. 그랬더니, [5, 7, 73] 이 나왔다. 마지막 행을 그대로 출력해주는 것인가? 했지만, max(배열이름)의 정체는 해당 배열에서 원소값의 합이 최대인 행을 출력해주는 기능을 하였다.

다른 예에서도 그렇게 나왔다.

n = int(input())
board = [list(map(int,input().split())) for _ in range(n)]
# 입력값
'''
5
6 8 2 6 2
3 2 3 4 6
6 7 3 3 2
8 9 5 2 7
7 2 5 3 6
'''
print(max(board))    # 출력값 : [8, 9, 5, 2, 7]

 

◆ 그러면, 2차원 배열에서 max 원소값을 찾으려면 어떻게 해야 할까?

map 함수를 이용하자!

: map함수를 사용하면 바로 2차원 배열 전체 범위에서 답을 구할 수 있다. map은 따로 공부가 필요할 정도로 기능이 다양하다.

 

다음과 같은 예제에서 max(map(max,배열이름)) 을 사용하면 된다.

vertices = [[1, 7, 12], [4, 7, 13], [1, 5, 17], [3, 5, 20], [2, 4, 24], [
    1, 4, 28], [3, 6, 37], [5, 6, 45], [2, 5, 62], [1, 2, 67], [5, 7, 73]]

numvert = max(map(max, vertices))

print(numvert)   # 출력값  : 73

똑같이 두번째 예제에 적용시키면,

n = int(input())
board = [list(map(int,input().split())) for _ in range(n)]
# 입력값
'''
5
6 8 2 6 2
3 2 3 4 6
6 7 3 3 2
8 9 5 2 7
7 2 5 3 6
'''
print(max(map(max,board)))    # 출력값 : 9

 

◆ 그렇다면, 2차원 배열에서 min 원소값을 찾으려면 min으로만 바꿔주면 되나?

맞다! min(map(min,배열이름) 으로 쓰면 되겠다.

 

이상으로, 2차원 배열에서 map을 이용해 최대값인 원소를 바로 추출할 수 있는 방법을 알아봤다.

반응형