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의 대소관계는 정해져있지 않습니다.
입출력 예
a | b | return |
---|---|---|
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
✍ 코드 - 첫 번째 풀이
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만 남으므로 가운데의 수를 제외한 값은 위의 설계와 동일하며 마지막에 가운데 수만 더해주면 된다.
📝 결과
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))
# (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
Author And Source
이 문제에 관하여(Programmers - 두 정수 사이의 합(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@irish/Programmers-두-정수-사이의-합Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)