백준 알고리즘 2566번
백준 알고리즘 2566번 최댓값
문제
<그림 1>과 같이 9x9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
1열 | 2열 | 3열 | 4열 | 5열 | 6열 | 7열 | 8열 | 9열 | |
---|---|---|---|---|---|---|---|---|---|
1행 | 3 | 23 | 85 | 34 | 17 | 74 | 25 | 52 | 65 |
2행 | 10 | 7 | 39 | 42 | 88 | 52 | 14 | 72 | 63 |
3행 | 87 | 42 | 18 | 78 | 53 | 45 | 18 | 84 | 53 |
4행 | 34 | 28 | 64 | 85 | 12 | 16 | 75 | 36 | 55 |
5행 | 21 | 77 | 45 | 35 | 28 | 75 | 90 | 76 | 1 |
6행 | 25 | 87 | 65 | 15 | 28 | 11 | 37 | 28 | 74 |
7행 | 65 | 27 | 75 | 41 | 7 | 89 | 78 | 64 | 39 |
8행 | 47 | 47 | 70 | 45 | 23 | 65 | 3 | 41 | 44 |
9행 | 87 | 13 | 82 | 38 | 31 | 12 | 29 | 29 | 80 |
이들 중 최댓값은 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)
- 입력받기
input().split()
을 사용하여 공백으로 구분된 숫자들을 문자열 리스트로 만든다.map(int, ...)
를 통해 이를 정수로 변환하여 2차원 리스트matrix
에 저장한다.
- 최댓값과 좌표 초기화
max_num
을 0으로 초기화하여 최댓값을 저장할 변수를 만들고,x
,y
를0
,0
으로 초기화하여 최댓값의 좌표를 저장할 변수를 만든다.
- 최댓값 탐색
- 이중
for
문을 사용하여 9x9 행렬의 모든 원소를 확인한다. - 만약 현재 원소가
max_num
보다 크다면,max_num
을 현재 원소로 업데이트하고, 그 위치(i, j)
를x
,y
에 저장한다.
- 이중
- 결과 출력
- 찾은 최댓값과 그 좌표를 출력한다.
- 좌표는 1부터 시작이므로,
x+1
,y+1
을 출력한다.