<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면 <그림 1>
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
[ 입력 ]
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
[ 출력 ]
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
입력받은 값대로 9×9 크기의 2차원 배열을 만들고, 최댓값을 찾은 다음 최댓값과 그 위치를 출력하면 되는 문제이다. * 참고로 2차원 배열 문제이지만, 이 문제는 이중 for문을 쓰지 않고도 풀 수 있다.
알고리즘:
입력받은 값이 들어갈 arr 리스트와, 입력받은 값들 중 최댓값을 가려내기 위한 maxArr 리스트를 만든다.
격자판의 크기가 9×9 크기로 고정되어 있으므로 9번 반복하는 반복문을 만든다.
한 줄씩 값을 입력받아 리스트 형태로 만든 후 inputArr 변수에 저장한다.
arr 리스트에 추가하고, 동시에 현재 입력받은 리스트에서 가장 큰 값을 골라내 maxArr 리스트에 추가한다.
4번의 과정을 거쳤다면 maxArr 리스트에는 9개의 값이 들어있게 되고, 이 중 가장 큰 값을 출력한다.
가장 큰 값의 위치를 찾기 위해 다시 한번 9번 반복하는 반복문을 만든다.
현재 찾은 가장 큰 값이 arr 내부에 모든 리스트에 들어 있는지 확인하고, 행 열 순서로 가장 큰 값의 위치를 출력한다.
코드:
arr = []
maxArr = []
for _ in range(9):
inputArr = list(map(int, input().split()))
arr.append(inputArr)
maxArr.append(max(inputArr))
print(max(maxArr))
for i in range(9):
if max(maxArr) in arr[i]:
print(i + 1, end=' ')
print(arr[i].index(max(maxArr)) + 1)