Python 2차원 배열의 최대값, 최소값 찾기
(update: 2022-04-22) HM Kim 님 덕분에 잘못된 정보를 찾았습니다. 감사합니다.
처음 드는 생각
가끔 알고리즘 문제풀이를 하다보면 어떤 iterable
의 최대값 또는 최소값을 찾아야 하는 경우가 발생한다. 이럴 경우 max
나 min
함수를 사용하면 최대값 혹은 최소값을 찾을 수 있다.
그런데 만일 2차원 리스트 전체 범위에서 최대, 최소값을 찾아야 하는 경우에는 조금 다른 방법을 사용해야 한다. 기존 방법대로 2차원 배열에 max, min
을 사용하면 다음과 같은 결과가 나타난다.
nums = [[1, 2, 3], [1, 4, 5], [4, 5, 6], [0, 1, 2], [0, 1, 1]]
print(min(nums))
결과가 다음과 같다.
[0, 1, 1]
파이썬의 경우는 리스트 조작이 간단하다보니 2차원 배열에도 바로 max, min
을 사용 가능할 거라고 생각이 들었는데, 리스트의 원소(원소 역시 리스트)중에서 첫 번째 원소의 값이 가장 작은 원소가 나와버린다.
아래에 소개할 내용이 생각나지 않는 경우에는 for
문을 사용해 각 리스트를 돌면서 원소를 새로 선언하는 1차원 리스트에 추가한 다음, 1차원 리스트에서 최대 혹은 최소를 구해도 되지만 시간도 낭비되고 메모리도 낭비되니 별로 추천하지 않는다.
크기 1의 추가 메모리만 사용하는 방법
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],
]
min_value = float('inf')
for vertice in vertices:
min_value = min(min(vertice), min_value)
print(min_value)
최소값을 저장할 변수 하나만 추가로 선언한 다음, 최소값을 갱신하면서 최소값을 구할 수 있다.
✨map
함수를 이용하자
이럴 경우에는 map
함수를 사용하면 바로 2차원 배열 전체 범위에서 답을 구할 수 있다. map
은 여러모로 쓰임새가 다양하니 꼭 공부해 두는게 좋다.
최대값 찾기
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],
]
min_value = max(map(max, vertices))
print(min_value)
결과
73
최소값 찾기
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],
]
min_value = min(map(min, vertices))
print(min_value)
결과
1