Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

알고리즘 08. 두 정수 사이의 합

22 May 2019 » Algorithm

2019.05.22

프로그래머스 알고리즘 문제 (lv1)

  • 두 정수 사이의 합

문제 설명

두 정수 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의 대소관계는 정해져있지 않습니다.

예시


a	b	return
3	5	12
3	3	3
5	3	12

나의 풀이 방법

의식의 흐름

  1. a와 b가 같은지 확인한다.
  2. a와 b 둘 중에 어느 수가 큰지 확인한다.
  3. 작은 수 먼저, 큰 수를 나열한다.
  4. a와 b사이의 숫자들을 하나씩 더한다.

컴퓨터에게는?

  1. a와 b가 다르고 a<b인 경우를 가정하여 계산한다.
  2. a와 b가 다르고 b<a인 경우를 가정하여 계산한다.
  3. a와 b가 같은 경우를 계산한다.
  4. answer을 반환한다.

코드


def solution(a, b):
    answer = 0
    if a != b and a < b:
        for i in range(a, b+1):
            answer += i
    elif a != b and a > b:
        for i in range(b, a+1):
            answer += i
    else:
        return a
    
    return answer

  • if문이 많이 들어가서 좋지 못한 코드 인 것 같은데..
  • 위의 if문과 아래의 if 문을 바꾸어 줄 수 있을 것 같다.
  • if a>b: a,b = b,a 를 활용하여 위 아래를 합쳐 줄 수 있다.

다른 사람 풀이


# 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.

def adder(a, b):
    # 함수를 완성하세요
    if a > b: a, b = b, a

    return sum(range(a,b+1))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( adder(3, 5))

  • sum(range())를 통해 그 사이에 있는 숫자들을 모두 더해 줄 수 있다는 것을 알게 되었다.
  • if a>b : a,b = b,a를 나도 나중에 써먹어야겠다.
  • 파이토닉하넹…