반응형
문제 링크 : https://www.acmicpc.net/problem/2851
문제 풀이
버섯은 처음부터 순서대로 먹어야 하므로 하나씩 더해가는 변수 total이 필요하다.
또한 여태까지 먹었던 버섯의 점수를 변수 ans에 넣고 100에서 뺀 절댓값을 통해 먹어야할지 말아야할지 결정한다.
1 2 3 5 8 13 21 34 55 89로 예를 들면,
(1) total에 1을 더하고 100 - total의 절댓값과 100 - ans의 절댓값을 비교한다. (ans는 0으로 초기화 되어있다.)
당연히 100 - total의 절댓값이 더 작으므로 더할 수 있다. 따라서 ans에 여태까지 더한 total값을 집어넣는다.
(2) 다음으로, 2를 더하면 total은 3이 된다. (1)과 마찬가지로 ans는 3이 된다.
(3) 이런 식으로 쭉 더하게 되면 total이 34까지 더하여 87이 되고, 비교를 거쳐 ans도 87이 된다. 다음으로 55를 더하려 할 때
total은 142가 된다. 이렇게 되면 아무리 더해도 100과 ans(87)의 차이인 13보다 작을 수 없게 된다. 따라서 for문이 끝났을 때,
ans에는 100과 가장 차이가 적은 87이 저장된다.
소스 코드
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int arr[10];
int total = 0;
int ans = 0;
for(int i=0; i<10; i++){
cin >> arr[i];
}
for(int i=0; i<10; i++){
total += arr[i];
if(abs(100 - total) <= abs(100 - ans)){
ans = total;
}
}
cout << ans;
}
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 1436 영화감독 숌 / C++ (0) | 2021.08.27 |
---|---|
BOJ 2810 컵홀더 / C++ (0) | 2021.08.27 |
BOJ 3040 - 백설 공주와 일곱 난쟁이 / C++ (0) | 2021.08.26 |
BOJ 10815 숫자 카드 / C++ (0) | 2021.07.16 |
BOJ 1541 잃어버린 괄호 / C++ (0) | 2021.07.16 |