https://www.acmicpc.net/problem/2851
<코드>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int score;
int time = 10;
int sum = 0;
vector<int>v;
while(time--)
{
cin>>score;
v.push_back(score);
}
for(int i=0;i<v.size();i++)
{
sum += v[i];
if(sum>=100)
{
if(sum - 100 <= 100 - (sum - v[i]))
{
cout<<sum<<'\n';
return 0;
}
else
{
cout<<sum - v[i]<<'\n';
return 0;
}
}
}
cout<<sum<<'\n';
}
<풀이 과정>
쉬운 문제 대비 정답률이 40퍼대로 낮은 편이다.
그 이유는 100에 가장 가까운 수의 합을 구하려고 사람들이 100을 기준으로 삼았기에, 모든 수의 합이 100인 것을 고려하지 않았기 때문이다. 그래서 100을 넘었을 때에 if문을 걸어주고, 바로 return값을 반환한다.
sum == 100을 넘었을 때의 sum 값, sum - v[i] == 100 넘기 직전의 sum값
sum - 100 >= 100 - (sum - v[i]) 예시는
예를 들어 120과 80의 값이 있고 v[i]가 40이면, 120 - 100 >= 100 - 80 이므로 조건이 참이기 때문에 120을 반환한다.
문제의 조건에서 100에 가까운 수가 두 개이면 큰 값을 반환한다고 설명해놨기 때문이다.
그리고 모든 수의 합이 100보다 작다면 무조건 100보다 가까운 수가 되기에, 그 값을 반환해주면 끝이다.
'PS > 브루트포스 알고리즘[Bruteforce]' 카테고리의 다른 글
백준 2503 숫자 야구(c++) (0) | 2022.10.19 |
---|---|
백준 1526 가장 큰 금민수(c++) (0) | 2022.10.19 |
백준 2303 숫자 게임(c++) (0) | 2022.10.15 |
백준 2003 수들의 합2(c++) (0) | 2022.10.14 |
백준 1018 체스판 다시 칠하기(c++) (1) | 2022.09.20 |