PS (C, C++)

[백준/C & C++] 2851 슈퍼마리오

최연재 2022. 9. 5. 17:33

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

 

2851번: 슈퍼 마리오

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

www.acmicpc.net

코드 (C)

#include <stdio.h>

int main()
{
	int arr[11], sum=0;
	for (int i = 0; i < 10; i++) scanf("%d", &arr[i]);
	for (int i = 0; i < 10; i++)
	{
		if (sum <= 100 && sum + arr[i] >= 100)
		{
			if (100 - sum < sum + arr[i] - 100)
			{
				printf("%d", sum);
				return 0;
			}
			else
			{
				printf("%d", sum + arr[i]);
				return 0;
			}
		}
		sum += arr[i];
	}
	printf("%d", sum);
	return 0;
}

코드 (C++)

#include <iostream>
using namespace std;

int main()
{
	int arr[11], sum = 0;
	for (int i = 0; i < 10; i++) cin >> arr[i];
	for (int i = 0; i < 10; i++)
	{
		if (sum <= 100 && sum + arr[i] >= 100)
		{
			if (100 - sum < sum + arr[i] - 100)
			{
				cout << sum;
				return 0;
			}
			else
			{
				cout << sum + arr[i];
				return 0;
			}
		}
		sum += arr[i];
	}
	cout << sum;
	return 0;
}

코드설명 

배열을 통해 입력받는 10개의 값을 저장한다. 

반복문을 돌면서 값들을 더해나가는데, 받은 점수의 합을 최대한 100에 가깝게 하기 위해서 만약 값이 100보다 작은 수에서 100을 넘어가는 경우에는 조건문으로 값을 확인한다. 

100에 가까운 수에서 100을 뺀 값의 절댓값을 서로 비교하는데, 만약 100보다 작은 수가 더 100과 가까울 경우에는 100보다 작은 값인 sum을 출력하고 프로그램을 종료한다. 만약 그에 해당하지 않는 경우에는 sum+arr[i]를 더한 값(100을 넘어감)을 출력하고 프로그램을 종료한다. 

 

반복문을 끝까지 돌았는데, 합이 100을 초과하지 않는 경우에는 합을 출력하고 프로그램을 종료한다. 

느낀 점

처음에 코드를 작성할 때 가장 마지막 두 줄을 작성하지 않았다. 당연히 더해나가다 보면 100을 초과하는 경우가 발생할 것이라고 생각한 나의 실수였다. 입력값이 어떻게 나올 지 모르므로 각 경우를 모두 고려해야 한다는 것을 다시 느꼈던 문제였다.