2019년 1월 26일 토요일

#10 알고리즘 연습 - 두 정수 사이의 합 - 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




문제풀이 IDEA

파이썬에서는 sum함수도 있고 list를 만드는 것도 쉽기때문에 list comprehension을 이용해
코드를 간결하게 짤수 있을 것 같다.



나의 코드⭐

1
2
3
4
5
6
7
8

def solution(a, b):
    if a<=b:
        temp = [i for i in range(a,b+1)]         #b가 a보다 크다면 a부터 b까지 
    else:                                         반복문을 통해 list생성
        temp = [i for i in range(b,a+1) ]        #a가 b보다 크다면 range의 
                                                  인자를 바꾸어 b부터 a까지 생성
    return sum(temp[:len(temp)])                 #sum함수에 temp함수의 시작부터
                                                  끝까지 slice를 넣어준다
                                ( 풀이를 적으면서 보니 그냥 temp만 넣어주는거랑 같은말)


다른 코드1 ⭐

1
2
3
4
5
6
7
8
9
10
11
# 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def adder(a, b):
    # 함수를 완성하세요
    if a > b: a, b = b, a             #a가 만약 b보다 크다면 a와 b를 swap해서 값을 바꿔줌
                                       
    return sum(range(a,b+1))          a부터 b까지의 값을 sum해줌


다른 코드2 (덧셈공식 이용) ⭐

1
2
3
4
5
6
7
8
# 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def adder(a, b):
    return (abs(a-b)+1)*(a+b)//2                 #abs라는 절댓값을 구하는 내장함수를 이용
                                                  a ~ b까지의 합을 구하는 덧셈 공식을 이용했다
                                                  
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( adder(3, 5))




살짝 더 알아 보자



python에서의 swap


if a > b:

    a,b = b,a


a,b = b,a를 이용해서 값 두개를 서로 바꿔줬다


a,b = b,a 뿐만아니라

a,b,c = b,c,a 이처럼 3개의 tuple에 대해서도 손쉽게 값을 swap해줄 수 있다.


주의 할점은 a,b = b,a 가 적용되는 범위는 해당 식이 있는 블록이라고 생각해주자

예시)
        def swap(a,b)
             a,b = b,a

        swap(a,b)를 해주면 a와 b의 값이 변경되지 않는다(함수 내에서만 변경된다)      

        따라서 swap (a,b) 이렇게 해주지 말고 그냥 a,b = b,a 이런식으로 작성을 해서 사용


덧셈공식


그.. 가우스의 천재성에 대한 일화로 유명한 1~100 까지의 덧셈방법이 기억나는가
(이 일화가 사실인지는 모르겠다)


1과 100을 더하고 2와 99를 더하고... 총 갯수의 반인 50을 곱해준 일화


이처럼 a부터 b까지의 합을 구하기 위해서는 

(첫번째항 + 마지막항) * 총 갯수/2 공식임을 다시한번 되새겨 보자


출처:https://programmers.co.kr

댓글 없음:

댓글 쓰기

가장 많이 본 글