백준 알고리즘 2566번

백준 알고리즘 2566번 최댓값

문제

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

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

 1열2열3열4열5열6열7열8열9열
1행32385341774255265
2행10739428852147263
3행874218785345188453
4행342864851216753655
5행21774535287590761
6행258765152811372874
7행65277541789786439
8행47477045236534144
9행871382383112292980

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

입력

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

출력

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

예제

입력

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

풀이

# 9x9 행렬을 입력받기
matrix = [list(map(int, input().split())) for _ in range(9)]

# 최댓값과 좌표 초기화
max_num = 0
x, y = 0, 0

# 행렬의 모든 원소를 탐색하며 최댓값과 좌표 찾기
for i in range(9):
    for j in range(9):
        if matrix[i][j] > max_num:
            max_num = matrix[i][j]
            x, y = i, j

# 최댓값과 좌표 출력 (좌표는 1부터 시작이므로 +1 해줌)
print(max_num)
print(x+1, y+1)
  1. 입력받기
    1. input().split()을 사용하여 공백으로 구분된 숫자들을 문자열 리스트로 만든다.
    2. map(int, ...)를 통해 이를 정수로 변환하여 2차원 리스트 matrix에 저장한다.
  2. 최댓값과 좌표 초기화
    1. max_num을 0으로 초기화하여 최댓값을 저장할 변수를 만들고, x, y0, 0으로 초기화하여 최댓값의 좌표를 저장할 변수를 만든다.
  3. 최댓값 탐색
    1. 이중 for문을 사용하여 9x9 행렬의 모든 원소를 확인한다.
    2. 만약 현재 원소가 max_num보다 크다면, max_num을 현재 원소로 업데이트하고, 그 위치 (i, j)x, y에 저장한다.
  4. 결과 출력
    1. 찾은 최댓값과 그 좌표를 출력한다.
    2. 좌표는 1부터 시작이므로, x+1, y+1을 출력한다.
* TOC {:toc}

© 2021. All rights reserved.