쌓고 쌓다

[백준] 슈퍼 마리오 2851번 C++ 풀이 본문

알고리즘/백준

[백준] 슈퍼 마리오 2851번 C++ 풀이

승민아 2022. 1. 6. 16:11

https://www.acmicpc.net/problem/2851

 

2851번: 슈퍼 마리오

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

www.acmicpc.net

#include <iostream>
#include <cmath>
using namespace std;
int arr[10];
int res = 0;


void solve()
{
	int sum=0;

	for (int i = 0; i < 10; i++)
	{
		sum += arr[i];
		if (abs(100 - res) >= abs(100 - sum))
		{
			res = sum;
			if (res >= 100)
			{
				cout << res;
				return;
			}
		}

	}
	cout << res;

}

int main(void)
{
	for (int i = 0; i < 10; i++)
	{
		cin >> arr[i];
	}
	solve();
}

res(결과)와 sum(이제껏 합)이 100과 얼마나 차이가 나는지 절댓값으로 확인 후

현재까지의 결과보다 차이가 더 안나는 sum을 찾은 경우 갱신을 해줍니다

하지만 100이 넘어가는 경우 그것은 즉시 바로 정답처리를 해주고 return으로 함수를 종료해줍니다

왜냐하면 100이 넘어가는 첫 sum이 무조건 정답일 수밖에 없기 때문입니다

만약 100이 안 넘어가는 경우 계속 수를 더해주면 됩니다.

for문을 다 통과해도 100이 안넘어가는경우 그냥 res를 출력해주면 됩니다.

Comments