본문 바로가기

CodingTest Exam/[C++] Algorithm Study

48. 각 행의 평균과 가장 가까운 값 (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★★☆☆☆

#include <stdio.h>
#include <vector>
#include <cmath>

using namespace std;

int main()
{
	int sum, mid, val = 0, min = 2147000000, temp;

	vector<int> row(9, 0);
	vector<vector<int>> num(9, row);

	for (int i = 0; i < num.size(); i++)
	{
		for (int j = 0; j < row.size(); j++)
		{
			scanf(" %d", &row[j]);
		}
		num[i] = row;
	}

	for (int i = 0; i < num.size(); i++)
	{
		sum = 0;
		for (int j = 0; j < row.size(); j++)
		{
			sum += num[i][j];
		}

		mid = sum / 9.0 + 0.5;
		for (int j = 0; j < row.size(); j++)
		{
			temp = abs(mid - num[i][j]);
			if (min >= temp)
			{
				if(min == temp)
				{
					if(val < num[i][j])
						val = num[i][j];
				}
				else
				{
					min = temp;
					val = num[i][j];
				}
			}
		}

		printf("%d %d\n", mid, val);
		val = 0;
		min = 21470000;
	}

	return 0;


}

1. 평균값을 구하기 위해 총 합 변수 sum, 평균값 mid, 평균과 가장 가까운 값 val, 평균과의 가장 적은 차이 min, 평균과의 차이 temp 를 선언한다.

2. 9 * 9 배열이기 때문에 9 크기의 vector 를 선언하고 0으로 초기화 한 뒤 2차원 vector를 초기화한다.

3. mid는 정수형 변수이기 때문에 sum / 9 를 하게 되면 소수점 부분이 소실되고 정수 부분만 남아 반올림을 할 수 없게 된다. 이에 sum / 9.0 을 해주어 실수형 변수로 전환한 뒤 0.5를 더하고(반올림) 정수형으로 다시 변환해준다.

4. cmath 라이브러리의 round() 를 이용할 수도 있다.