카테고리 없음

[c++] 백준 2566번 최댓값

기술1 2024. 5. 22. 13:40
반응형

 

문제

#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;
}

이렇게 배열을 사용하지 않고 각각 최댓값과 자리의 값을 구해주셔도 됩니다. 

반응형