Programmers - 두 정수 사이의 합(Python)

문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

제한 조건

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

입출력 예

abreturn
3512
333
5312

✍ 코드 - 첫 번째 풀이

def solution(a, b):
    answer = 0

    if a == b:
        answer = a
        return answer

    if b < a :
        x = a
        a = b
        b = x

    for i in range(a, b+1):
        answer += i

    return answer

a = 5
b = 3
print (solution(a, b))
  • a와 b의 대소 관계를 비교해서 만약 b가 a보다 작을 경우 a와 b를 치환하였다.
  • for문을 이용해서 a부터 b까지의 범위를 차례대로 answer에 합산하였다.

✍ 코드 - 두 번째 풀이


# (1)

def solution(a, b):
    answer = 0


    if a == b:
        answer = a
        return answer

    if b < a :
        x = a
        a = b
        b = x

    a_b_len = b - a + 1

    if a_b_len % 2 == 0 :
        answer = (a+b) * (a_b_len//2)

    else :
        answer = (a+b) * ((a_b_len-1)//2) + ((a+b)/2)

    return int(answer)

a = 5
b = 3
print (solution(a, b)) 
  • (1) : 해당 풀이로 시간 복잡도를 비약적으로 줄였다. 만약 1~6까지의 범위라 할 때 1 2 3 4 5 6이 있고 1+6, 2+5, 3+4의 값이 모두 동일하므로 맨 앞의 숫자와 맨 뒤의 수를 합산하고, 전체 수가 6개 일때의 절반인 3을 곱하면 7 * 3 = 21이 된다. 만약 1~7의 범위라고 하면 1 2 3 4 5 6 7 이 있고 1+7, 2+6, 3+5의 값은 모두 같고 가운데 수 4만 남으므로 가운데의 수를 제외한 값은 위의 설계와 동일하며 마지막에 가운데 수만 더해주면 된다.

📝 결과

😃 느낀점

  • 첫 번째 풀이 이후, 좀 더 문제를 능률적으로 해결할 수 있는 방법이 무엇이 있을까 생각해봤다. 생각해보니 a부터 b까지(a < b라고 가정) 차례대로 더한다면 a~b까지 짝수개일 때는 (a+b) 길이 / 2, 홀수개일 때는 (a+b) 길이 / 2 + 가운데에 있는 숫자로 한다면 좀 더 문제를 쉽게 해결할 수 있다고 생각됐다. 다행히 이 설계 방식이 맞았다. 첫 번째 풀이에 그치지 않고 좀 더 능률적으로 코딩할 수 있는 방법이 있지 않을까라는 생각을 한 오늘의 내가 기특했다.

👍 Irish의 모든 코드 보기

-> Irish Github

좋은 웹페이지 즐겨찾기