본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 2851번 : 슈퍼마리오 답

반응형

www.acmicpc.net/problem/2851

 

2851번: 슈퍼 마리오

첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.

www.acmicpc.net

버섯 먹는 것을 중단해야할 때를 잘 처리해줘야되는 문제입니다.

풀이방법

 1. 100과의 차이 계산 : 현재버섯을 먹었을 때 100과의 차이, 현재 ans에 저장된 변수의 값과 100의 차이를 구해줍니다.

 2. ans값 갱신여부 판단

   2-1. 만약 ans의 gap(차이)가 더 크다면 현재 버섯을 먹는것이 이득이므로 ans값을 sum으로 갱신해줍니다.

   2-2. 만약 100과의 차이가 서로 같다면 더 큰 값을 ans변수로 갱신해줍니다.

 3. 답 출력

 

Code 

#include <bits/stdc++.h>
using namespace std;
int main(){
    int sum = 0;
    int ans = 0;
    int score[10];
    for(int i = 0; i < 10; i++) cin >> score[i];
    for(int i = 0; i < 10; i++){
        sum += score[i];
        int sumGap = abs(100 - sum);
        int ansGap = abs(100 - ans);
        if(sumGap < ansGap) ans = sum;
        else if(sumGap==ansGap) ans = max(ans,sum);
    }
    cout << ans <<'\n';
}

 

Test Case

input

1
1
1
1
1
1
1
1
91
2
답 : 101

 


input
1
1
1
1
1
1
1
1
91
3

답 : 99