본문 바로가기
Python/파이썬 문법 Tips

[ 파이썬(Python) ] 2차원 행렬에서 세로로 최대값, 최소값 갱신하기

by YWTechIT 2021. 5. 27.
728x90

📍 2차원 행렬에서 세로로 최댓값, 최솟값 갱신하기

세로 R, 가로 S인 2차원 행렬에서 세로로 최대값과 최솟값을 갱신할 때 어떻게 할까? 예를 들어 다음과 같은 2차원 행렬이 있다고 가정해보자.

'''
R, S = 10, 4

x...
xx..
.xx.
..xx
...x
....
#...
##..
.##.
..##
...#
'''

여기서 x일 때 각 세로축에서의 최대값, #일 때 각 세로축에서의 최소값을 구하려면 다음과 같이 구할 수 있다.


다음과 같이 가로길이만큼 빈 리스트를 선언해준 다음 현재 좌표가 x 일 때 해당하는 열을 빈리스트의 index로 사용한다. 이때 비교해야하는 값은 i(row)다. 높이는 row값이기 때문이다. min값도 마찬가지로 해당하는 열을 index로 사용하고 그때의 row값을 비교하여 더 작은값을 경신해주면 된다.

728x90

입력을 받아야하는 문제를 풀 때 arr = [input() for _ in range(R)]로 선언해주면 되는데 input()에도 list()를 씌우지 않아도 되는 이유는 문자열에서도 인덱싱이 가능하기 때문이다.

R, S = 10, 4
arr = ['x...', 'xx..', '.xx.', '..xx', '....', '#...', '##..', '.##.', '..##', '...#']

max_dot = [-3333] * S
min_sharp = [1 << 14] * S

for i in range(R):
    for j in range(S):
        if arr[i][j] == 'x':
            max_dot[j] = max(max_dot[j], i)
        elif arr[i][j] == '#':
            min_sharp[j] = min(min_sharp[j], i)

print(max_dot)
👉🏽 [1, 2, 3, 3]

print(min_sharp)
👉🏽 [5, 6, 7, 8]
반응형

댓글