민규의 흔적

[Python 파이썬]백준 2566번 - 최댓값 본문

BOJ

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

민규링 2023. 5. 5. 23:59

2023년 5월 5일

문제 링크 : 백준 2566번 - 최댓값

문제

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면

 

이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

알고리즘 분류

  • 구현

문제 접근

2차원 배열을 선언할 필요 없이, 각 행을 입력 받을 때마다 현재 검사하는 데이터를 기존 최댓값 정보와 비교하여 조건이 충족되면 갱신하는 방향으로 로직을 구성하였다.

 

순서도

1. 최댓값을 담을 변수, 최댓값의 행과 열 정보를 담을 변수를 선언한다.

2. for문을 통해, 총 9개의 행 정보를 각각 입력 받는다.

3. 2중for문을 통해, 각 행의 9개의 각 열 정보를 하나씩 검사한다
	3-1. 검사한 데이터가 지금까지의 최댓값보다 크다면 최댓값과 해당 데이터의 행과 열 정보를 갱신한다.
    
4. 주어진 전체 행렬의 최댓값과 최댓값의 위치 정보를 출력한다.

입력 예제

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

첫 번째 행, [ 3 23 85 34 17 74 25 52 65 ] 을 입력받는다.

입력받은 행의 왼쪽부터 최댓값과 검사를 진행하고, 해당 방식을 9행 모두에 진행한다.

해당 과정을 모두 거치면 최댓값은 90으로 픽스되며, 90의 위치 값을 받아놓고 출력하면 다음과 같다.

출력 예제

90
5 7

주의할 점

 

  1. 딱히 주의할 점은 없지만, 나는 최댓값, 최댓값의 행, 최댓값의 열 값을 담을 변수의 각각 초기값을 0,0,0으로 선언했다가 한 번 틀렸었다. 이유는 모든 입력 값이 0일 때, 지금까지의 최댓값보다 '클 때'  최댓값을 갱신하는 로직으로 수행하면 출력 값이 다음과 같게 된다.
0
0 0

      행렬은 1행 1열부터 시작하기에, 초기값 세팅과 로직을 나처럼 정의한 경우에는 예외사항이 생기게 되니 조심해야 한다.

 


전체 코드

# 2566

max_num = -1 # 최댓값을 담을 변수
max_row = 0 # 최댓값의 위치 중, 행 값을 담을 변수
max_col = 0 # 최댓값의 위치 중, 열 값을 담을 변수

# 9개의 행 데이터가 주어짐
for row in range(9):
    # 데이터들을 한 행 씩 받음
    temp_arr = list(map(int,input().split()))
    # 각 행은 9개의 열로 이루어져 있음
    for col in range(9):
        # 입력받은 행 값을 하나씩 검사함
        # 만약 검사중인 값이 최댓값보다 크다면 최댓값, 행 값, 열 값을 갱신 시켜줌.
        if temp_arr[col] > max_num:
            max_row = row + 1
            max_col = col + 1
            max_num = temp_arr[col]

print(max_num)
print("%d %d"%(max_row, max_col))

 


풀이 후기

문제 자체는 접근부터 풀이까지 순조롭게 진행되었는데, 주의할 점에서 언급한 바와 같은 이유로 '틀렸습니다' 통보를 받으니 순간 머리가 띵했다. 문제가 쉬워도 무시하지 말자.