본문 바로가기

공부하는 것들/알고리즘

백준 4299 : AFC 윔블던 **

 

www.acmicpc.net/problem/4299

 

4299번: AFC 윔블던

원섭이는 잉글랜드 4부리그 풋볼 리그 2에서 활약하는 AFC 윔블던을 좋아한다. 이 팀은 2002년 윔블던 FC가 밀턴 킨스로 연고 이전을 감행하자 윔블던의 서포터들이 스스로 나서 창단한 팀이다. 윔

www.acmicpc.net

문제 요약: 

두 팀이 경기를 한 후, 두 팀이 득점한 점수의 합과 차를 알려준다. 이 때, 점수가 높은 순으로 출력하라.

단, 적당한 경기 결과가 없다면, -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