https://www.acmicpc.net/problem/2566
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
mat = []
max_val, max_row, max_col = 0, 0, 0
for _ in range(9): # 행렬 입력 받음
row = list(map(int, input().split()))
mat.append(row)
for row in range(9): # 행렬의 값에 순서대로 접근
for col in range(9):
if mat[row][col] > max_val: # 해당 행렬값이 최댓값인지 확인
max_val = mat[row][col] # 최댓값 갱신
max_row = row # 최댓값의 행 인덱스 갱신
max_col = col # 최댓값의 열 인덱스 갱신
print(max_val) # 최댓값 출력
print(max_row+1, max_col+1) # 최댓값의 행, 열 출력 (인덱스+1)
넘 쉬워잉
max_num = 0
for i in range(9):
row = list(map(int, input().split())) #굳이 행렬을 저장할 필요는 없다
if max(row) > max_num:
max_num = max(row) #최댓값
x = i + 1 #행
y = row.index(max_num) + 1 #열
print(max_num)
print(x,y)
천재적이다
난 당연히 행렬 저장 후 각 행과 열에 하나씩 접근하는 방식만 생각했는데
1. 저장을 안해도 되고
2. max, index 등 기본 함수를 적절히 사용한 게
정말 파이썬스러운 코드인 것 같다.