[알고리즘 프로그래머스] 두 정수 사이의 합 (LEVEL 1)

(문제) 두 정수 사이의 합


두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.

예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

입력설명

입력으로는 a 와 b 가 들어옵니다.

a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.

a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.

a와 b의 대소관계는 정해져있지 않습니다.

출력설명

a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성

테스트케이스

입력예제 출력예제
3 5 12
3 3 3
5 3 12

해결방법

방법1 (range 반복문으로 더하기)

ab 중 큰 값을 찾아서 반복문으로 작은 값부터 큰 값 까지를 더한다.

방법2 (인수분해 사용)

일정한 수열의 특징을 이용한다.

만약 3 ~ 5 까지의 연속된 수들의 합을 구하려면

1 ~ 2 까지 그리고 1 ~ 5 까지의 수열 2개에서 (큰 값 수열) - (작은 값 수열)을 한다.
(입력 받은 수 중 작은 값은 -1 한 수열이다)

5 : 5 4 3 2 1
2 : 2 1

그러면 위 같이 원하는 수열의 값들을 얻을 수 있다.

그러면 수열을 전부다 더하는 공식을 이용하여 생각을 해보자!



그러고 위의 식을 대입하여 생각을 해보자.
(b 가 큰 수라고 생각하고 a는 이미 입력으로 받은 값 중 작은 값은데 -1 했다고 가정을 하자)







인수분해







이렇게 우리는 a 와 b 만으로 수식을 구해 코드를 만들 수 있다.

(b-a)*(a+b+1)//2

코드 방법 1

def solution(a, b):
    return sum(range(min([a,b]),max([a+1,b+1])))

코드 방법 2

def solution(a, b):
    if a > b:
        a, b = b, a
    a = a - 1
    return (b-a)*(a+b+1)//2

댓글남기기