[파이썬] 백준 2566번: 최댓값
백준 2566번 [최댓값]의 파이썬 코드 및 풀이입니다.
https://www.acmicpc.net/problem/2566
2566번: 최댓값
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
www.acmicpc.net
예제 입력 & 출력
입력 |
출력 |
3 23 85 34 17 74 25 52 65 10 7 39 42 88 52 14 72 63 87 42 18 78 53 45 18 84 53 34 28 64 85 12 16 75 36 55 21 77 45 35 28 75 90 76 1 25 87 65 15 28 11 37 28 74 65 27 75 41 7 89 78 64 39 47 47 70 45 23 65 3 41 44 87 13 82 38 31 12 29 29 80 |
90 5 7 |
코드
1) 1차원 배열로 푼 것
import sys
max_result = [0]*9
col = [0]*9
for i in range(9):
arr_input = list(map(int, sys.stdin.readline().split()))
max_result[i] = max(arr_input)
col[i] = arr_input.index(max(arr_input))
print(max(max_result))
print("%d %d"%(max_result.index(max(max_result))+1,col[max_result.index(max(max_result))]+1))
2) 인덱스를 2차원 배열로 해서 푼 것
import sys
max = -1
index = [0,0]
for i in range(9):
arr_input = list(map(int, sys.stdin.readline().split()))
for j in range(9):
if arr_input[j]>max:
max = arr_input[j]
index = [i+1,j+1]
print(max)
print(*index)
풀이
문제의 목적
9x9 행렬에서 최댓값을 찾고, 그 최댓값의 행과 열을 구하는 것
이 문제는 다양한 풀이가 가능합니다.
위에 2가지 풀이를 제시해 놓았고, 원하시는 방향으로 풀면 될 것 같습니다.
1)의 해설
우선 첫 번째 풀이는 1차원 배열을 이용한 풀이입니다.
max_result = [0]*9
col = [0]*9
각 행의 최댓값을 저장해둘 max_result라는 리스트와 그 최댓값의 행을 저장해둘 col이라는 리스트를 각각 선언해줍니다.
for i in range(9):
arr_input = list(map(int, input().split()))
max_result[i] = max(arr_input)
col[i] = arr_input.index(max(arr_input))
arr_input에서 입력을 받고,
max 함수를 이용하여 바로 최댓값을 더해준 후 max_result 리스트에 넣어줍니다.
그리고 col 배열에도 그 최댓값의 열을 넣어줍니다.
행을 굳이 2차원 배열로 하여 같이 생각하지 않는 이유는 max_result과 col이라는 리스트의 열이 행을 의미하고 있기 때문입니다! 따로 생각해줄 필요가 없는거죠. 밑의 출력 코드를 보시면 이해가 되실 겁니다.
print(max(max_result))
print("%d %d"%(max_result.index(max(max_result))+1,col[max_result.index(max(max_result))]+1))
그리고 각 행의 최댓값이 들어있는 max_result의 최댓값을 통하여 최종 최댓값을 출력합니다.
두 번째 줄이 좀 복잡한데요, 행은 위에서 말했다시피 max_result나 col의 index와 같기 때문에 저렇게 출력해줍니다.
열은 똑같이 col 리스트를 이용하여 같은 방법으로 구해주시면 됩니다.
체크해야 할 점은 문제에서는 1행~9행이라 행과 열에 1을 더해서 출력해줘야 한다는 것입니다.
2)의 해설
2는 index라는 이차원 배열을 이용하는 풀이입니다.
for i in range(9):
arr_input = list(map(int, sys.stdin.readline().split()))
for j in range(9):
if arr_input[j]>max:
max = arr_input[j]
index = [i+1,j+1]
두 번째 for문을 볼까요?
만약 새로운 input 값이 max 라는 현재 최댓값보다 크다면 max값을 그 때마다 갱신시켜 주는 것입니다.
갱신시킬 때마다 당연히 index 값도 갱신 시켜줘야겠죠?
2번째 풀이가 좀 더 직관적이고 쉬운 것 같긴 하지만
여러가지 풀이에 도전하시는 것도 좋을 것 같습니다.
감사합니다!