반응형
문제
코드
#include <iostream>
using namespace std;
int main()
{
int arr[10][10];
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
cin >> arr[i][j];
}
}
int max = -1;
int arr1 = 0;
int arr2 = 0;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
if (arr[i][j] > max)
{
max = arr[i][j];
arr1 = i;
arr2 = j;
}
}
}
cout << max << endl;
cout << arr1 << " " << arr2;
return 0;
}
해설
9 x 9 이차원 배열을 입력 받고 가장 큰 수와 위치를 출력하면 된다.
저 같은 경우 배열을 만들어서 최댓값을 찾아주었습니다.
인덱스인 0, 0과 달리 1,1부터 시작 유의
* 여기서 제일 놓치기 쉬운 부분은 모든 수가 0이 나올 때 max를 0으로 두면 자리의 값이 구해지지 않으므로 max를 -1로 초기화를 해주어야 합니다.
:
9x9 행렬을 읽어들임:
// 9x9 행렬의 값을 입력받음 (첫 번째 행과 열은 무시)
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
cin >> arr[i][j];
}
}
표준 입력에서 값을 읽어 9x9 행렬에 저장합니다. 여기서 첫 번째 행과 첫 번째 열(인덱스 0)은 무시됩니다.
구체적으로, arr[1][1]부터 arr[9][9]까지의 값을 읽어들입니다.
최대값과 그 위치 찾기:
9x9 행렬을 순회하여 최대값과 그 위치(행과 열 인덱스)를 찾습니다.
// 최대값을 행렬의 어느 값보다 작은 값으로 초기화
int max = -1;
int arr1 = 0;
int arr2 = 0;
// 9x9 행렬에서 최대값과 그 위치를 찾음
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
if (arr[i][j] > max)
{
max = arr[i][j];
arr1 = i;
arr2 = j;
}
}
}
최대값과 그 위치 출력:
행렬에서 찾은 최대값을 출력합니다.
최대값의 1-based 인덱스(행과 열)를 출력합니다.
제가 코드에서 1에서 10까지 for문을 한 것은 코드열이 1부터 시작하기 때문입니다.
저는 임의로 이렇게 해주었지만 보기 편하게 수정해주셔도 됩니다.
다른 풀이
#include <iostream>
using namespace std;
int a, x, y;
int maxi = -1;
int main() {
for (int i = 1; i <= 9; i++) {
for (int k = 1; k <= 9; k++) {
cin >> a;
if (maxi <= a) {
maxi = a;
x = i;
y = k;
}
}
}
cout << maxi << '\n';
cout << x << ' ' << y;
return 0;
}
이렇게 배열을 사용하지 않고 각각 최댓값과 자리의 값을 구해주셔도 됩니다.
반응형