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)
그 방법을 사용한게 위의 코드이다. 위의 코드는 다른 사람이 쓴것이다. 시간복잡도는 리스트컴프리헨션을 쓴 코드와 동일하다.
'Back-end > 백준(python)' 카테고리의 다른 글
[백준/python] 2563 색종이: 정사각형 넓이 구하기/ 얕은 복사에 대하여 (1) | 2023.10.24 |
---|---|
[백준/python] 10798번 세로 읽기: (0) | 2023.10.24 |
[백준/python] 2738번 행렬 덧셈: 행렬의 크기와 원소 받아 2차원 배열 만들기 (1) | 2023.10.24 |
[백준/python] 25206번 너의 평점은: dictionary 이용 key값 받아 value 얻기 (1) | 2023.10.24 |
[백준/python] 1316: 그룹 단어 체커/ set(), list(dict.fromkeys()) 차이 (0) | 2023.10.24 |