본문 바로가기
Programming Solve/BOJ

BOJ 2851 슈퍼 마리오 / C++

by msm1029 2021. 8. 27.
반응형

문제 링크 : https://www.acmicpc.net/problem/2851

 

2851번: 슈퍼 마리오

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

www.acmicpc.net

 

문제 풀이

버섯은 처음부터 순서대로 먹어야 하므로 하나씩 더해가는 변수 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