문제출처: https://www.acmicpc.net/problem/5691


문제

세 정수 A, B, C의 평균은 (A+B+C)/3이다. 세 정수의 중앙값은 수의 크기가 증가하는 순서로 정렬했을 때, 가운데 있는 값이다.

두 정수 A와 B가 주어진다. 이때, A, B, C의 평균과 중앙값을 같게 만드는 가장 작은 정수 C를 찾는 프로그램을 작성하시오.


입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, A와 B가 주어진다. (1 ≤ A ≤ B ≤ 109) 입력의 마지막 줄에는 0이 두 개 주어진다. 


출력

각 테스트 케이스에 대한 정답을 한 줄에 하나씩 출력한다.


풀이

단순히 세 수의 평균값과 중앙값을 같게 만드는 수를 구하는문제입니다.

정답률을 보고 대충 주어진 입력 케이스를 유추하여 '2A-b인게 답이구나'  생각 할 수있지만 노트에 끄적여보며 왜 저 식이 답인지 알아봅시다. 이런 손으로 푸는 연습들이 어려운 수학문제를 풀 때 충분한 밑거름이 될 거라고 생각합니다.

1. 세 수의 평균을 구하는 식은 (A+B+C)/3입니다.(이 때 C가 답)

2. C를 추가했을 때 가장 작은 중앙값은 무조건 A입니다. (A의 왼쪽에 오나 오른쪽에 오나 가장 작은 중앙값은 A이므로)

3. 구하는 답이 1번식==2번식일 때 C의 값이므로 풀어써봅니다. 나오는 C에대한 식을 출력하면됩니다.

(A+B+C)/3 == A   -> (A+B+C)==3A   -> C=2A-B 


코드

#include<iostream>
using namespace std;
int main()
{
	int a, b;
	while (1)
	{
		cin >> a >> b;
		if (a == 0 && b == 0)
			break;
		cout << 2 * a - b << endl;
	}
}


결과



+ Recent posts