by CodeJin19
1 min read

Categories

Tags

오늘의 문제는 “1812번 사탕”.

N명 학생들이 각자 사탕을 갖고 있고, N개의 줄에 이웃한 두 학생의 사탕의 합을 입력으로 받는다.

입력 받은 사탕의 수를 모두 합하면 전체 학생의 사탕 수의 두 배를 알 수 있다.

이 합을 2로 나누면 전체 사탕의 수가 되고

전체 사탕의 수를 적절히 활용하면 각 학생의 사탕수를 찾을 수 있다.

#include <iostream>

using namespace std;

int main()
{
	int n;
	int sum = 0;
	int arr[1010];

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];

		sum += arr[i];
	}

	sum /= 2;

	for (int i = 1; i < n - 1; i++)
	{
		sum -= arr[i];
	}

	cout << sum << "\n";

	for (int i = 0; i < n - 1; i++)
	{
		sum = arr[i] - sum;
		cout << sum << "\n";
	}

	return 0;
}

이 문제도 역시 예시는 맞있는데 전체 테스트 케이스는 틀렸다고 한다.

자세히 보니 전체 합인 sum을 활용해서 각 학생의 사탕 수를 구할 때,

배열에 i를 하나씩 올린게 화근이었다.

#include <iostream>

using namespace std;

int main()
{
	int n;
	int sum = 0;
	int arr[1010];

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];

		sum += arr[i];
	}

	sum /= 2;

	for (int i = 1; i < n - 1;)
	{
		sum -= arr[i];
		i += 2;
	}

	cout << sum << "\n";

	for (int i = 0; i < n - 1; i++)
	{
		sum = arr[i] - sum;
		cout << sum << "\n";
	}

	cin >> n;

	return 0;
}