📄문제
9 × 9 격자판에 쓰여진 81개의 자연수가 주어질 때, 각 행의 평균을 구하고, 그 평균과 가장 가까운 값을 출력하는 프로그램을 작성하세요. 평균은 소수점 첫 째 자리에서 반올림합니다. 평균과 가까운 값이 두 개이면 그 중 큰 값을 출력하세요.
⬇️ 입력
첫 째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 자연수가 주어진다. 주어지는 자연수는 100보다 작다.
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 50 12 48 29 80 |
⬆️ 출력
첫째 줄에 첫 번째 줄부터 각 줄에 각행의 평균과 그 행에서 평균과 가장 가까운 수를 출력한다.
42 34 43 42 53 53 45 36 50 45 41 37 54 64 43 44 49 50 |
📝 풀이
#include <iostream>
int main()
{
int** arr = new int* [9];
int* avg = new int[9];
for (int i = 0; i < 9; ++i)
{
arr[i] = new int[9];
int sum = 0;
for (int j = 0; j < 9; ++j)
{
scanf_s("%d", &arr[i][j]);
sum += arr[i][j];
}
avg[i] = std::round((float)sum / 9); // 반올림
}
for (int i = 0; i < 9; ++i)
{
int nearestNum = 0;
int nearestGap = INT_MAX;
for (int j = 0; j < 9; ++j)
{
int gap = std::abs(avg[i] - arr[i][j]);
if (gap < nearestGap)
{
nearestGap = gap;
nearestNum = arr[i][j];
}
}
printf("%d %d\n", avg[i], nearestNum);
}
}
- 간단한 문제로, 입력을 받을 때 각 행에 해당하는 평균을 구합니다.
- 한번 더 검사를 통해 nearestNum보다 더 차이가 작은 값을 찾습니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 영지(territory) 선택 🔥 (0) | 2023.10.16 |
---|---|
[C++] 블록의 최댓값 (0) | 2023.10.16 |
[C++] 봉우리 (1) | 2023.10.16 |
[C++] 멀티태스킹 (1) | 2023.10.16 |
[C++] 공주 구하기 (요세푸스 문제) (1) | 2023.10.16 |