728x90
https://www.acmicpc.net/problem/2548
2548번: 대표 자연수
첫째 줄에는 자연수의 개수 N이 입력된다. N은 1 이상 20,000 이하이다. 둘째 줄에는 N개의 자연수가 빈칸을 사이에 두고 입력되며, 이 수들은 모두 1 이상 10,000 이하이다.
www.acmicpc.net
문제 요약
주어진 자연수에 대해 그 차이를 계산하여 차이의 전체 합을 최소로 하는 자연수 = 대표 자연수를 구하라
(대표 자연수가 두 개 이상이면 가장 작은 것 출력)
범위
N은 1 이상 20,000 이하
입력되는 자연수는 1 이상 10,000 이하
자연수 k의 범위를 정하고 완전 탐색으로 돌면서 각 원소들과의 차이를 더해 최소 값을 구하면 된다.
k의 범위는 1부터(0은 자연수가 아님) 입력된 원소의 가장 큰 값(_max)까지를 k의 범위로 정했다. 가장 큰 값 이상으로는 차이가 작아질 수 없기 때문에 범위에 속할 필요가 없다.
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int n, number[20001], _max = -1, _min = 1000000000, ans;
void input(){
cin >> n;
for(int i=0; i<n; i++) {
cin >> number[i];
_max = max(_max, number[i]);
}
}
void solution(){
for(int k=1; k<=_max; k++){
int sum = 0;
for(int i=0; i<n; i++) sum += abs(number[i] - k);
if(_min > sum){
_min = sum;
ans = k;
}
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
input();
solution();
return 0;
}
💡공부 및 기록용 블로그이므로 오류가 있을 수 있습니다.💡
만약 문제에 오류나 오타가 있다면 댓글로 알려주세요➿
언제나 환영합니다. 감사합니다. 화이팅!
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 2606번: 바이러스 (0) | 2022.01.19 |
---|---|
[c++] 1260번: DFS와 BFS (0) | 2022.01.17 |
[c++] 1120번: 문자열 (0) | 2022.01.16 |
[c++] 15565번: 귀여운 라이언 (0) | 2022.01.16 |
[c++] 2559번: 수열 (0) | 2022.01.16 |