it 취업을 위한 알고리즘 문제풀이 입문 : 48. 각 행의 평균과 가장 가까운 값
🙇♀️각 행의 평균과 가장 가까운 값
<그림 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;
}