Adventure Time - Jake [백준/python] 2566번 최댓값: 2차원 행렬에서 최댓값 찾고 해당 위치(행,열) 출력/ max(map(max, arr))
본문 바로가기
Back-end/백준(python)

[백준/python] 2566번 최댓값: 2차원 행렬에서 최댓값 찾고 해당 위치(행,열) 출력/ max(map(max, arr))

by bogyoi 2023. 10. 24.

 

arr=[0]*9
for i in range(9):
    arr[i]=list(map(int, input().split()))

for i in range(9):
    for j in range(9):
        if arr[i][j]==max(map(max, arr)):
            a,b=i+1,j+1

print(max(map(max, arr)), a,b)
 
 

max(map(max, arr)) 를 통해 2차원 리스트에서 최댓값을 찾게 했다.

인덱스를 구하기위해 2중 for-loop를 돌면서 최댓값을 발견하게 되면 그 자리의 위치(i,j)를 받아 출력하게함.

 

파이썬에서 인덱스의 위치를 반환해주는 index() 함수가 있는데, 2차원 리스트에서는 위와 같이 for-loop를 사용해 일일히 비교를 하거나, List comprehension를 사용해주는 방법이 있는 것 같다.

arr=[0]*9
for i in range(9):
    arr[i]=list(map(int, input().split()))

indx=[(i,j) for i in range(9) for j in range(9) 
        if arr[i][j]==max(map(max, arr))]

print(max(map(max, arr)), indx[0][0]+1, indx[0][1]+1)
 

위의 코드가 리스트 컴프리헨션을 이용해 만든 코드이다.

사실 for-loop을 사용하는 방법이 시간복잡도가 조금 더 낫다. 더 쉽고 간단하기도 하다고 느껴져서 두번째 방법은 굳이 쓸 필요 없을 것 같다.

개인적으로 아직 리스트 컴프리헨션이 조금 낯설게 느껴지기도 하고, 튜플로 받아서 리스트에 담은 결과가 indx에 담겨서 헷갈리기도 했다. 처음엔 indx[0], indx[1]로 출력했다가 디버깅하면서 indx=[ , ] 가 아니라 indx=[( , )] 인걸 알았다..

 

 

 

아니면 for-loop를 돌면서 새로운 max값이 나타나면 max값을 갱신시켜주는 방식으로 하여 max값을 찾고 그떄의 위치를 출력해줄 수도 있다.

table = [list(map(int, input().split())) for _ in range(9)]

max_num = 0
max_row, max_col = 0, 0
for row in range(9):
    for col in range(9):
        if max_num <= table[row][col]:
            max_row = row + 1
            max_col = col + 1
            max_num = table[row][col]

print(max_num)
print(max_row, max_col)
 

그 방법을 사용한게 위의 코드이다. 위의 코드는 다른 사람이 쓴것이다. 시간복잡도는 리스트컴프리헨션을 쓴 코드와 동일하다.