<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
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열에 위치한다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
예제 입력 1
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
예제 출력 1
90
5 7
해결 아이디어
9x9크기의 2차원 배열을 만들고, 2중for문으로 입력을 받는다.
입력을 받는 과정에서 최댓값을 확인하여, 최댓값이 갱신될때마다 row, col값을 바꿔주며 마지막에 출력할때에는 row, col을 각각 1씩 더하여 출력한다.
더하는 이유는, 배열의 인덱스는 0부터이지만 문제에서는 1행부터.. 시작되기 때문
#include <iostream>
using namespace std;
int main()
{
int mat[9][9];
int max = -1;
int row, col;
for (int i = 0; i < 9; ++i)
{
for(int j = 0; j < 9; ++j)
{
cin >> mat[i][j];
if (mat[i][j] > max)
{
max = mat[i][j];
row = i;
col = j;
}
}
}
printf("%d\n", max);
printf("%d %d", row + 1, col + 1);
}
'algorithms (C++)' 카테고리의 다른 글
[C++] 백준 2750번 / 수 정렬하기 (0) | 2022.11.08 |
---|---|
[C++] 백준 2563번 / 색종이 (0) | 2022.11.07 |
[C++] 백준 2738번 / 행렬 덧셈 (0) | 2022.11.07 |
[C++] 백준 17478번 / 재귀함수가 뭔가요? (0) | 2022.08.20 |
[C++] 백준 10872번 / 팩토리얼 (0) | 2022.07.26 |