문제 요약:
두 팀이 경기를 한 후, 두 팀이 득점한 점수의 합과 차를 알려준다. 이 때, 점수가 높은 순으로 출력하라.
단, 적당한 경기 결과가 없다면, -1을 출력.
Input : N, M
--> x+y = N, x-y = M
--> x = (N+M)/2 , y = (N-M)/2
Output : reverse_sorted([x,y])
고려해야 할 점 : 적당한 경기 결과가 없을 경우
1. 해가 정수가 아닐 경우 (if 문)
: 해를 구한 후, 정수로 변환하고, 두 값이 같으면 [0,0] -->ans =[-1]
2. 해가 음의 정수인 경우 (elif 문)
: 해 두개 중 한개가 음수인 경우 --> ans = [-1]
if __name__=='__main__':
N,M = list(map(int,input().split()))
scores = [(N+M)/2 , (N-M)/2]
scores_int = list(map(int,scores))
int_check = [scores[i]-scores_int[i] for i in range(2)]
if int_check != [0,0] : ans = [-1]
elif scores[0]<0 or scores[1]<0 : ans = [-1]
else:
ans = scores_int.copy()
ans.sort(reverse=True)
print(*ans)
--------------------------
더 간단한 코드가 없나 찾아봤는데, hello70825님의 코드가 인상적이다.
애초에 해를 정수로 받아놓고, 원래의 방정식이 복구되는 지만 봐도 충분하구나..
위에꺼는 80ms 걸렸는데, 이 코드는 64ms 가 걸린다.
if __name__=='__main__':
a,b=map(int,input().split())
x=(a+b)//2;y=(a-b)//2
if y>=0 and x+y==a and x-y==b:print(x,y)
else:print(-1)
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 5543 : 상근날드 (0) | 2021.02.21 |
---|---|
백준 5532 : 방학 숙제 (0) | 2021.02.21 |
백준 2753 : 윤년 (0) | 2021.02.20 |
백준 2752 : 세수정렬 (0) | 2021.02.20 |
백준 2588 : 곱셈 (0) | 2021.02.20 |