문제
두 팀의 점수 합 A와 점수 차 B가 주어질 때, 각 팀의 점수를 구하라. 불가능하면 -1을 출력한다.
입력
점수 합 A와 점수 차 B가 주어진다.
출력
높은 점수와 낮은 점수를 출력한다. 불가능하면 -1을 출력한다.
예제
| 입력 | 출력 |
|---|---|
3 1 | 2 1 |
풀이
연립방정식 x + y = A, x - y = B를 풀어 각 점수를 구한다.
A < B이면 불가능하므로 -1을 출력한다x = (A + B) / 2,y = (A - B) / 2로 계산한다x + y == A이고x - y == B인지 검증한다 (정수 해 존재 확인)- 검증 실패 시 -1, 성공 시 x와 y를 출력한다
핵심 아이디어: A+B가 홀수이면 정수 해가 없으므로 불가능하다. 검증 과정에서 이를 자연스럽게 걸러낸다.
코드
#include <iostream>
using namespace std;
int main()
{
int a, b, x, y;
cin >> a >> b;
if (a < b)
cout << "-1";
else
{
x = (a + b) / 2;
y = (a - b) / 2;
if (x + y == a && x - y == b)
cout << x << " " << y;
else
cout << "-1";
}
return 0;
}복잡도
- 시간: O(1)
- 공간: O(1)