프로그래밍/백준

[파이썬] 백준 2566번: 최댓값

Liamm_ 2023. 1. 19. 14:42
반응형

백준 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번째 풀이가 좀 더 직관적이고 쉬운 것 같긴 하지만

여러가지 풀이에 도전하시는 것도 좋을 것 같습니다.

 

감사합니다!

반응형