본문 바로가기
Algorithm/BackJoon

2851번: 슈퍼 마리오

by 꼬부기가우는소리 2023. 8. 31.
728x90

- 문제 사이트: https://www.acmicpc.net/problem/2851

 

2851번: 슈퍼 마리오

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

www.acmicpc.net

 

누적 합을 계산하고 푸는 문제이다.

 

10개의 값이 주어졌을 때,

1) 모든 수를 합하기 전에 100에 도달한 경우

2) 모든 수를 합하였으나, 100에 도달하지 못한 경우

 

이렇게 두 케이스로 나누어 결과를 계산해주어야 한다.

 

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int num[10];
    for (int& n : num)
        cin >> n;
    
    int sum1 = 0;
    int sum2 = 0;
    for (int n : num)
    {
        sum1 = sum2;
        sum2 += n;

        // 모든 수를 합하기 전에 100에 도달한 경우
        if (sum2 >= 100)
        {
            if (abs(sum1 - 100) >= abs(sum2 - 100))
                cout << sum2;
            else
                cout << sum1;
            return 0;
        }
    }

    // 모든 수를 합하였으나 100이 되지 않는 경우
    cout << sum2;
    return 0;
}

- 메모리: 2020 KB

- 시간: 0 ms

- 코드 길이: 607 B

 

두 케이스를 확인하는 것이 아닌, 수를 합할 때마다  비교해서 가장 작은 값을 설정해 주는 방법도 있다.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int num[10];
    for (int& n : num)
        cin >> n;
    
    int result = 0;
    int sum = 0;
    for (int n : num)
    {
        sum += n;
        if (abs(result - 100) >= abs(sum - 100))
            result = sum;
    }
    cout << result;
    return 0;
}

- 메모리: 2020 KB

- 시간: 0 ms

- 코드 길이: 335 B

'Algorithm > BackJoon' 카테고리의 다른 글

12789번: 도키도키 간식드리미  (0) 2023.09.03
11659번: 구간 합 구하기 4  (0) 2023.09.01
5337번: 웰컴  (0) 2023.07.11
3046번: R2  (0) 2023.07.09
24723번: 녹색거탑  (0) 2023.07.07

댓글