코딩테스트

[프로그래머스] [Python] 두 정수 사이의 합

히그다스 2023. 11. 6. 14:42

 

 

오늘도 파이썬

 

나는 발전 중이다 3번 복창하면서 시작

 

 

 

 

sum(range()) 되는지 안되는지는 모르지만 일단 고

return 을 안넣어서 결과가 출력이 안되는 불상사가 잠시 있었다(머쓱)

 

그래도 생각 좀 정리하고 하니까 금방 풀렸다

하지만 항상 더 좋은 코드가 있지

 

 

def solution(a, b):
    if a > b:
        return sum(range(b,a+1))
    elif b > a:
        return sum(range(a,b+1))
    else:
        return a

 

 

다른 사람의 풀이

 

a, b = b, a !!

 

완전 기억 속에서 없어져있던 걸 쓰셨다

 

근데 댓글에

 

a,b가 같은 숫자일 경우도 같이 처리 해주셨으면 다른 케이스에서도 속도가 올라갔을거예요~!

 

 

이런말이 있어서 이것도 유의해야겠다 싶었다

 

def adder(a, b):
    if a > b:
        a, b = b, a
    return sum(range(a, b + 1))

 

 

이것은 뭔가 좋은 코드 같은데

왜 이렇게 했는지까지는 이해가 잘 안간다

이 코드가 시간복잡도 O(1)이라고....

 

이해하려고 댓글을 봐도

n(n+1)/2를 이용했다는데

... 수학공부를 다시 해야겠다

 

 

def adder(a, b):
    return (abs(a-b)+1)*(a+b)//2

 

 

+) 친구가 설명해줘서 이해했다

 

n(n+1)/2 가 n까지의 합인데

a와 b사이의 합을 구해야하니까

b까지의 합 - a까지의 합 + 빠져버리는 a 다시 더하기b(b+1)/2 - a(a+1)/2 + a

이 식을 다시 정리하면 (b+a)(b-a+1)/2

a, b의 크기는 안정해져서 b-a했을 때 마이너스가 될 수도 있으니

abs로 절대값 만들어주기

 

휴 설명 끝

난 이해했다

그럼 참고가 됐기를 바라며

친구에게 이 공을 돌립니다

 

 


출처 : 프로그래머스