🙇‍♀️각 행의 평균과 가장 가까운 값

<그림 1>과 같이 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

🚀풀이

평균을 저장할 배열과 가장 가까운 값을 저장할 배열을 만들어서 풀었다.

반올림의 경우 float변수를 만들어서 소수점까지 있게 만든 뒤, int로 형변환을 해서 소수점을 없애고 두 개의 차이를 확인해서 반올림 여부를 확인했다.

가장 가까운 값이 두 개 이상이면 더 큰 숫자를 선택해야하므로, 이 경우로 예외처리 해주었다.

int avg[10];
int res[10];
vector<vector<int>> board(10, vector<int>(10));

void setting()
{
	for (int y = 1; y <= 9; ++y)
	{
		float temp = 0;
		for (int x = 1; x <= 9; ++x)
		{
			cin >> board[y][x];
			temp += board[y][x];
		}
		temp = temp / 9;
		if ((temp - (int)temp) >= 0.5)
			avg[y] = (int)temp + 1;
		else
			avg[y] = (int)temp;

		// 차이가 가장 작은 것을 찾기
		int min = 100;
		for (int x = 1; x <= 9; ++x)
		{
			if (abs(avg[y] - board[y][x]) < min)
			{
				min = abs(avg[y] - board[y][x]);
				res[y] = board[y][x];
			}
			else if (abs(avg[y] - board[y][x]) == min)
			{
				if (res[y] < board[y][x])
				{
					res[y] = board[y][x];
				}
			}
		}
	}
}

void solve()
{
	for (int i = 1; i <= 9; ++i)
	{
		cout << avg[i] << " " << res[i] << endl;
	}
}

🚀전체 코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;


int avg[10];
int res[10];
vector<vector<int>> board(10, vector<int>(10));

void setting()
{
	for (int y = 1; y <= 9; ++y)
	{
		float temp = 0;
		for (int x = 1; x <= 9; ++x)
		{
			cin >> board[y][x];
			temp += board[y][x];
		}
		temp = temp / 9;
		if ((temp - (int)temp) >= 0.5)
			avg[y] = (int)temp + 1;
		else
			avg[y] = (int)temp;

		// 차이가 가장 작은 것을 찾기
		int min = 100;
		for (int x = 1; x <= 9; ++x)
		{
			if (abs(avg[y] - board[y][x]) < min)
			{
				min = abs(avg[y] - board[y][x]);
				res[y] = board[y][x];
			}
			else if (abs(avg[y] - board[y][x]) == min)
			{
				if (res[y] < board[y][x])
				{
					res[y] = board[y][x];
				}
			}
		}
	}
}

void solve()
{
	for (int i = 1; i <= 9; ++i)
	{
		cout << avg[i] << " " << res[i] << endl;
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	//freopen("input.txt", "rt", stdin);

	setting();
	solve();

	return 0;
}